2012-12-12 15 views
5

Kullanıcının uygulamada kullanmak üzere bir fotoğraf yüklemesine izin vermek için bir UIImagePickerController kullanıyorum. Yüklenecek bir fotoğraf seçtikten sonra, kullanıcının fotoğrafını kırpması istenir (imagePickerController.allowsEditing = YES'u ayarlamış olduğum için). Bununla birlikte, eğer fotoğraf yatayysa (yani, daha uzun olduğundan daha genişse), kullanıcının fotoğrafı kare bir görüntü vermeyecek şekilde kesmesi mümkündür. Bunun nedeni, manzara fotoğraflarını kırpırken varsayılan zum seviyesinin, AspectFill'den ziyade (portre fotoğrafları için olduğu gibi) aspectFit olmasıdır.UIImagePickerController kırpması için minimum yakınlaştırma düzeyini ayarlama

UIImagePickerController düzenleme modu için minimum yakınlaştırma seviyesini ayarlamak mümkün mü? Çıktı karesi yoksa, görüntüyü otomatik olarak kırpabiliyordum, ancak UIImagePickerController düzenleme modunun bunu kullanıcı için değil, kullanıcıya iletmesini tercih ederim.

cevap

1

UIImagePickerController kırpma/düzenleme özelliğinin davranışını desteklenen bir şekilde ayarlamak mümkün değildir. Potansiyel olarak UIImagePickerController denetleyici/görünüm hiyerarşisine girebilir ve nasıl çalıştığını anlamaya çalışabilirsiniz, ancak bu çok bakım gerektirmeyen veya hoş bir şey değildir.

UIImagePickerController UINavigationController bir alt sınıfıdır, bu yüzden kendi resim düzenleme görünümü denetleyicisi uygulanması ve UIImagePickerController üzerine iterek alıkoyan şey yok, Having. Bu muhtemelen çok zor olmazdı, UIImage ürününü UIScrollView ürününe ekleyerek kırpma alanını gösteren, bir miktar matematik yapıp, UIImage ürününü kırpın. Açıkçası bu durumda işlevsellik üzerinde tam bir kontrole sahip olursunuz ve bahse girerim ki, UIImagePickerController'un bağırsaklarına dalmaktan daha az zaman alır.

@interface MainViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate, ImageEditorViewControllerDelegate> 
@end 

@implementation MainViewController { 
    UIImagePickerController* _imagePickerController; 
} 
#pragma mark IBAction 
- (IBAction)pickImage:(id)sender { 
    _imagePickerController = [[UIImagePickerController alloc] init]; 
    _imagePickerController.delegate = self; 
    _imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
    _imagePickerController.allowsEditing = NO; 

    [self presentViewController:_imagePickerController animated:YES completion:nil]; 
} 


#pragma mark UIImagePickerControllerDelegate 
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
    ImageEditorViewController* imageEditorViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"ImageEditor"]; 
    imageEditorViewController.delegate = self; 
    imageEditorViewController.imageToEdit = info[UIImagePickerControllerOriginalImage]; 

    [_imagePickerController pushViewController:imageEditorViewController animated:YES]; 
} 


- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { 
    [self dismissViewControllerAnimated:YES completion:^{ 
     _imagePickerController = nil; 
    }]; 
} 


#pragma mark ImageEditorViewControllerDelegate 
- (void)imageEditorViewController:(ImageEditorViewController *)imageEditorViewController didFinishWithInfo:(NSDictionary *)info { 
    // TODO: Handle the edited media 

    [self dismissViewControllerAnimated:YES completion:^{ 
     _imagePickerController = nil; 
    }]; 
} 
@end 

Ve sonra düzenleme görünümü (ihtiyaçlarınıza özgü bir uygulama ile) böyle bir arabirim olurdu:

ben muhtemelen böyle seçici sunulan her türlü görüş kontrolörü kurmak istiyorum

@protocol ImageEditorViewControllerDelegate; 

@interface ImageEditorViewController : UIViewController 
@property(nonatomic, strong) UIImage* imageToEdit; 

@property(nonatomic, weak) id <ImageEditorViewControllerDelegate> delegate; 
@end 

@protocol ImageEditorViewControllerDelegate 
- (void)imageEditorViewController:(ImageEditorViewController*)imageEditorViewController didFinishWithInfo:(NSDictionary*)info; 
@end 
İlgili konular