UIImagePicker 被选中后重新出现
UIImagePicker reappears after being image is selected
我有一个 UIImagePicker
在我选择图像后不断出现。我的代码正在检查摄像头,然后根据模拟器中没有摄像头的事实显示 UIImagePicker
。
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
self.imagePicker = [[UIImagePickerController alloc] init];
self.imagePicker.delegate = self;
self.imagePicker.allowsEditing = YES;
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
self.imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
}
else {
self.imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
}
self.imagePicker.mediaTypes = [NSArray arrayWithObjects:(NSString *)kUTTypeImage, nil];
[self presentViewController:self.imagePicker animated:NO completion:nil];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self clear];
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
UIImage *chosenImage = info[UIImagePickerControllerEditedImage];
self.imageView.image = chosenImage;
[self dismissViewControllerAnimated:YES completion:nil];
}
我需要强制重新加载我的初始视图吗?有没有更聪明的方法来做到这一点?
编辑
我在导航栏中添加了一个栏按钮,并在该操作上触发了我的代码。这解决了问题,似乎是一种更好的方法。
可能 viewWillAppear
每次 UIImagePickerController
消失时都会被调用 - 因为您放置代码的视图控制器再次变得可见。
您可以尝试在 viewDidLoad
中创建 UIImagePickerController
,或者使用布尔值 属性 来检查它是否是第一次调用它。
您的代码由视图控制器的 viewWillAppear 方法调用。
当它触发时,它会模态地显示一个视图控制器。当您关闭它时,您的视图控制器就会被发现。它的 viewWillAppear 方法被调用,显示一个新的图像选择器,循环继续...
我有一个 UIImagePicker
在我选择图像后不断出现。我的代码正在检查摄像头,然后根据模拟器中没有摄像头的事实显示 UIImagePicker
。
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
self.imagePicker = [[UIImagePickerController alloc] init];
self.imagePicker.delegate = self;
self.imagePicker.allowsEditing = YES;
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
self.imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
}
else {
self.imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
}
self.imagePicker.mediaTypes = [NSArray arrayWithObjects:(NSString *)kUTTypeImage, nil];
[self presentViewController:self.imagePicker animated:NO completion:nil];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self clear];
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
UIImage *chosenImage = info[UIImagePickerControllerEditedImage];
self.imageView.image = chosenImage;
[self dismissViewControllerAnimated:YES completion:nil];
}
我需要强制重新加载我的初始视图吗?有没有更聪明的方法来做到这一点?
编辑
我在导航栏中添加了一个栏按钮,并在该操作上触发了我的代码。这解决了问题,似乎是一种更好的方法。
可能 viewWillAppear
每次 UIImagePickerController
消失时都会被调用 - 因为您放置代码的视图控制器再次变得可见。
您可以尝试在 viewDidLoad
中创建 UIImagePickerController
,或者使用布尔值 属性 来检查它是否是第一次调用它。
您的代码由视图控制器的 viewWillAppear 方法调用。
当它触发时,它会模态地显示一个视图控制器。当您关闭它时,您的视图控制器就会被发现。它的 viewWillAppear 方法被调用,显示一个新的图像选择器,循环继续...