У меня есть приложение, которое должно сделать снимок, а затем показать его пользователю. Я открыл камеру, чтобы позволить пользователю сделать снимок, используя следующий код:
if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera]) {
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self;
imagePicker.sourceType =
UIImagePickerControllerSourceTypeCamera;
imagePicker.mediaTypes = @[(NSString *) kUTTypeImage];
imagePicker.allowsEditing = NO;
imagePicker.modalPresentationStyle = UIModalPresentationFullScreen;
[self presentViewController:imagePicker animated:YES completion:nil];
} else {
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle: @"Camera failed to open"
message: @"Camera is not available"
delegate: nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}
Это представляет вид камеры, чтобы пользователь мог сделать снимок. Я реализовал методы для обработки событий отмены и завершения следующим образом:
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
[self dismissViewControllerAnimated:YES completion:nil];
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
[self dismissViewControllerAnimated:YES completion:nil];
UIImage * image = [info objectForKey:UIImagePickerControllerEditedImage];
[photoView setImage:image];
[photoView setNeedsDisplay];
}
Проблема в том, что после прохождения последней функции изображение равно нулю. Сначала уволитьViewControllerAnimated был в конце функции, но в этом сообщении SO ответ объясняет, что ОтклонитьViewControllerAnimated должен быть вызван первым, а средство выбора должно быть отпущено до получения изображения из информации. Я попытался поместить отклонение ViewControllerAnimated вверху, но, поскольку я использую ARC, я не могу отпустить средство выбора.
Как я могу получить изображение из информации?
imagePicker.allowsEditing = NO;
нельзя редактировать, поэтому необходимо проверять только исходное изображение. 10.12.2013