2012-12-12 17 views
5

के लिए न्यूनतम ज़ूम स्तर सेट करें, मैं उपयोगकर्ता को अपने एप्लिकेशन में उपयोग के लिए फोटो अपलोड करने की अनुमति देने के लिए UIImagePickerController का उपयोग कर रहा हूं। अपलोड करने के लिए एक फोटो चुनने के बाद, उपयोगकर्ता को उसकी तस्वीर फसल करने के लिए कहा जाता है (क्योंकि मैंने imagePickerController.allowsEditing = YES सेट किया है)। हालांकि, अगर फोटो लैंडस्केप है (यानी, यह लम्बाई से बड़ा है), तो वर्तमान में यह तस्वीर संभवतः फोटो को फसल करने के लिए संभव है जिससे स्क्वायर छवि आउटपुट न हो। ऐसा इसलिए है क्योंकि लैंडस्केप फ़ोटो को क्रॉप करते समय डिफ़ॉल्ट ज़ूम स्तर पहलू के बजाय पहलू फिट है (जैसा कि यह पोर्ट्रेट फ़ोटो के लिए है)।UIImagePickerController क्रॉपिंग

क्या UIImagePickerController के संपादन मोड के लिए न्यूनतम ज़ूम स्तर सेट करना संभव है? मुझे लगता है कि आउटपुट स्क्वायर नहीं होने पर मैं छवि को स्वचालित रूप से क्रॉप कर सकता हूं, लेकिन मैं चाहता हूं कि UIImagePickerController का संपादन मोड इसे उपयोगकर्ता के लिए करने के बजाए उपयोगकर्ता को बताए।

उत्तर

1

समर्थित तरीके से UIImagePickerController फसल/संपादन सुविधा के व्यवहार को समायोजित करना संभव नहीं है। आप UIImagePickerController नियंत्रक/पदानुक्रम को संभावित रूप से खोद सकते हैं और यह पता लगाने की कोशिश कर सकते हैं कि यह कैसे काम करता है, लेकिन यह एक बहुत ही रखरखाव या सुखद काम नहीं है।

कहा करने के बाद कि, UIImagePickerControllerUINavigationController का एक उपवर्ग है, इसलिए वहाँ अपनी स्वयं की छवि संपादन दृश्य नियंत्रक को लागू करने और UIImagePickerController पर इसे आगे बढ़ाने से क्या रोक रहा कुछ भी नहीं है। यह शायद बहुत कठिन नहीं होगा, आप केवल UIImage को UIScrollView में फसल क्षेत्र दिखाते हुए आयताकार ओवरले के साथ फेंक सकते हैं, कुछ गणित कर सकते हैं और UIImage स्वयं फसल कर सकते हैं। इस मामले में कार्यक्षमता पर आपको स्पष्ट रूप से पूर्ण नियंत्रण होगा और मुझे लगता है कि UIImagePickerController की गड़बड़ी में spelunking से लागू करने में कम समय लगेगा।

मैं शायद इसे सेट अप जो भी दृश्य नियंत्रक इस तरह पिकर प्रस्तुत:

@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 

और फिर अपने संपादन दृश्य (एक कार्यान्वयन विशिष्ट अपनी आवश्यकताओं के साथ) इस तरह एक अंतरफलक होगा:

@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 
संबंधित मुद्दे