5

私はUIImagePickerControllerを使用して、ユーザーが自分のアプリケーションで使用するために写真をアップロードできるようにしています。アップロードする写真を選択すると、ユーザーは写真を切り抜くように求められます(imagePickerController.allowsEditing = YESに設定されているため)。しかし、写真が風景である(すなわち、写真よりも広い)場合、現在のところ、正方形の画像を出力しないように写真をトリミングすることが可能である。これは、風景写真をトリミングするときのデフォルトのズームレベルが、aspectFillではなくaspectFit(ポートレート写真の場合のように)であるためです。UIImagePickerControllerクロッピングの最小ズームレベルを設定する

UIImagePickerControllerの編集モードの最小ズームレベルを設定することはできますか?私は出力が四角ではない場合、単純にイメージをトリミングすることができますが、私はUIImagePickerControllerの編集モードが、彼/彼女のために行うのではなく、ユーザーにこれを伝えることを望みます。

答えて

1

UIImagePickerControllerトリミング/編集機能の動作をサポートされた方法で調整することはできません。 UIImagePickerControllerコントローラー/ビュー階層を掘り下げてどのように動作するのか把握しようとするかもしれませんが、これは非常に保守的で楽しいことではありません。

UIImagePickerControllerUINavigationControllerのサブクラスなので、独自の画像編集ビューコントローラを実装してUIImagePickerControllerにプッシュすることはできません。これはあまり難しくないでしょう。選択したUIImageUIScrollViewに投げ込んで、作図領域を示す長方形のオーバーレイを表示し、数学を行い、UIImageを切り抜くことができます。あなたは明らかにこの場合の機能を完全に制御するだろうし、UIImagePickerControllerの勇気を発揮するよりも実装に時間がかからないだろう。

@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 
関連する問題