#iphone #objective-c #ios
#iPhone #objective-c #iOS
Вопрос:
У меня есть приложение, которое делает снимок и помещает его в виде изображения. Просто. Код выглядит следующим образом:
- (void)takePhoto:(id)sender
{
// Lazily allocate image picker controller
if (!imagePickerController) {
imagePickerController = [[UIImagePickerController alloc] init];
// If our device has a camera, we want to take a picture, otherwise, we just pick from
// photo library
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{
[imagePickerController setSourceType:UIImagePickerControllerSourceTypeCamera];
}else
{
[imagePickerController setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
}
// image picker needs a delegate so we can respond to its messages
[imagePickerController setDelegate:self];
}
// Place image picker on the screen
[self presentModalViewController:imagePickerController animated:YES];
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
image = [ImageHelpers imageWithImage:image scaledToSize:CGSizeMake(480, 640)];
[imageView setImage:image];
[self dismissModalViewControllerAnimated:YES];
}
Когда я использую фотопленку, все работает отлично, но если я использую настоящую камеру, изображение получается просто черным. Почему это?
Нужно ли мне сохранять его на фотопленку, прежде чем использовать в режиме просмотра изображений?
Комментарии:
1. Установите точку останова, чтобы проверить, является ли изображение нулевым, когда оно передается в ImageHelpers
2. Нет, похоже, это не равно нулю. Я могу сохранить фотографию на фотопленку, используя: UIImageWriteToSavedPhotosAlbum(), чтобы изображение существовало в переменной. Кажется, что он теряется, когда я присваиваю его ImageView.
3. Думаю, мне нужно где-то сохранить его, прежде чем отправлять в my view. Какой подход был бы здесь наилучшим?
Ответ №1:
ОК. Решение нашел сам.
Сначала мне пришлось отключить модальный просмотр…
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
[self dismissModalViewControllerAnimated:YES]; //Do this first!!
UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
image = [ImageHelpers imageWithImage:image scaledToSize:CGSizeMake(480, 640)];
[imageView setImage:image];
}
Ответ №2:
Почему вы не можете просто использовать этот код?
- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo
{
[imageView setImage:image];
[picker dismissModalViewControllerAnimated:YES];
[picker release];
}
Комментарии:
1. Ну, в iOS 3 это устарело… developer.apple.com/library/ios/#documentation/UIKit/Reference /… :
2. ОК. Я все еще не хочу использовать устаревшую функцию 😉