누군가에게 도움을 줄 수있는 문제가 있습니다. 나는 그것이 매우 간단하다는 것을 확신하지만, 나는 그것을 볼 수 없으며이 버그를 발견하는 데 도움이되는 여분의 눈 모음을 실제로 사용할 수 있습니다.dismissModalViewController가 예상대로 작동하지 않습니다.
내가 사용중인 앱은 UIImagePickerController를 사용하여 스톡 카메라 UI가 숨겨진 카메라 미리보기를 제공합니다. 이 미리보기는 필요한 작업을 수행하는 몇 가지 단추가있는 cameraOverlay보기를 구현하며 그 중 하나는 카메라 미리보기를 닫는 것입니다.
오버레이보기에서 단추로 호출 할 때 어떤 이유로 카메라보기를 닫는 기능이 작동하지 않습니다. NSLog 함수를 실제로 단추에 의해 호출되는 볼 수 있지만 단순히 dismissModalViewController 작동하도록 허용하지 않습니다. 필자는 NSTimer를로드 한 후 몇 초간 호출하여 함수를 테스트했으며 cameraOverlay의 단추에서 호출 할 때 제대로 작동하지 않습니다.
내 viewController (CameraTestViewController.m)는 아래 그림과 같이 버튼을 눌러 UIImagePicker를 호출합니다.
-(IBAction) getPhoto:(id) sender {
OverlayView *overlay = [[OverlayView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGTH)];
picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
picker.cameraDevice = UIImagePickerControllerCameraDeviceFront;
picker.cameraOverlayView = overlay;
picker.showsCameraControls = NO;
picker.toolbarHidden = YES;
[self presentModalViewController:picker animated:NO];
//[self performSelector:@selector(doCancel) withObject:nil afterDelay:10];
}
내가 필요한 버튼을 설정 다른 곳의 ViewController 내 OverlayView.m 클래스의 다음
-(void)doCancel
{
NSLog (@"doCancel method has been called");
[picker dismissModalViewControllerAnimated:YES];
}
에서이 방법으로 카메라 뷰를 닫고의 뒤 삭제를 호출하는 방법을 제공 모달 뷰 컨트롤러.
- (id)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
// Clear the background of the overlay:
self.opaque = NO;
self.backgroundColor = [UIColor clearColor];
...
myButton04 = [UIButton buttonWithType:UIButtonTypeCustom];
myButton04.frame = CGRectMake(10, 447, 44, 13);
[myButton04 setTitle:@"" forState:UIControlStateNormal];
[myButton04 addTarget:self action:@selector(scanButton05TouchUpInside) forControlEvents:UIControlEventTouchUpInside];
[myButton04 setImage:[UIImage imageNamed:@"camControlsBack.png"] forState:UIControlStateNormal];
[self addSubview:myButton04];
...
}
return self;
}
- (void) scanButton05TouchUpInside {
NSLog(@"BACK BUTTON HAS BEEN PRESSED");
CameraTestViewController *baseViewController = [[CameraTestViewController alloc] init];
[baseViewController doCancel];
}
가장 도움이 될만한 도움이 될 것입니다. 나는 보라색 이마를 가지고이 벽에 머리를 두들겨 맞기가 아프다. : 시원함 :
고맙습니다.
당신은'전화 - [자기 presentModalViewController를 : 애니메이션 :] ','왜 이렇게 '- [self dismissModalViewControllerAnimated :]'를 호출 할 것이다. 뷰 자체는 그려지지만 뷰 컨트롤러는 스스로를 닫지 않습니다. –
그것은 'doCancel'메서드가 호출되는 코드입니다. 그것은 내가 수많은 앱에서 해낸 것과 같은 방식이지만, 어떤 이유로 여기서는 작동하지 않습니다. CameraTestViewController 클래스에서 doCancel 메서드를 호출하고 뷰를로드 한 후에 프로그래밍 방식으로 NSTimer에 의해 트리거 될 때 작동하지만 버튼을 누르지 않으면 작동합니다. OverlayView 클래스에 메서드를 넣으려고하면 SIGABRT 신호가 발생합니다. – viewPusher
사실, 위의 코드에서 'self'대신 'picker'라고 불렀습니다.하지만 두 가지 방법으로 시도해 보았습니다. – viewPusher