Я использую UIImagePickerController в приложении для iOS, чтобы сохранить изображение в контексте, используя UIGraphicsBeginImageContext / UIGraphicsBeginImageContextWithOptions.
Недавно я заметил, что изображение, которое я сохранил и затем отобразил позднее, было сильно пикселировано;Когда я вернулся с тем же кодом и снова импортировал фотографию, я получил отличное изображение.Поиграв с этим некоторое время на моем устройстве, я понял, что качество сохраненного изображения зависит от того, КОГДА я нажал кнопку «Выбрать» на экране «Переместить и масштабировать».
Если изображение большего размера и все еще загружается, когда я нажимаю кнопку, изображение пикселируется ... если я подожду, пока изображение загрузится, это нормально.У меня вопрос, есть ли способ, которым я могу контролировать, когда пользователь нажимает кнопку «Выбрать», - есть ли способ заставить их ждать, пока изображение полностью не загрузится?Или есть другой способ, который был бы лучше подойти к этому вопросу?
- (void)choosePhoto {
//NSLog(@"%s", __FUNCTION__);
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self;
imagePicker.allowsEditing = YES;
imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentModalViewController:imagePicker animated:YES];
[imagePicker release];
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
//NSLog(@"%s", __FUNCTION__);
[self dismissModalViewControllerAnimated:YES];
UIImage *pickedImage = (UIImage*)[info objectForKey:@"UIImagePickerControllerEditedImage"];
[self setPersonImage:pickedImage];
}
- (void) setPersonImage:(UIImage *)pickedImage {
//NSLog(@"%s", __FUNCTION__);
NSManagedObjectContext *context = [[UIApplication sharedDelegate] managedObjectContext];
PersonImage *oldImage = person.image;
if (oldImage != nil) {
[context deleteObject:(NSManagedObject*)oldImage];
}
if (pickedImage != nil) {
// Create an image object for the new image.
PersonImage *newImageObject = [NSEntityDescription insertNewObjectForEntityForName:@"PersonImage" inManagedObjectContext:context];
[newImageObject setImage:pickedImage];
[person setImage:newImageObject];
}
else {
[person setImage:nil];
}
NSError *error;
if (![context save:&error]) {
exit(-1); // Fail
}
}