2017-10-16 11 views
1

私はUIImagePickerControllerを使用して写真とクロップ画像を選択しています。iOS 11 UIImagePickerController選択後キャンセルボタンバグ

これは、ここで https://forums.developer.apple.com/thread/88286

で見られるように、同じような状況では、私のコードです:

- (void) onTest:(UIButton *)btn { 
    UIImagePickerController *picker = [[UIImagePickerController alloc] init]; 
    picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; 
    picker.delegate = self; 
    picker.allowsEditing = YES; 
    [picker setModalPresentationStyle: UIModalPresentationOverCurrentContext]; 
    [self presentViewController:picker animated:YES completion:nil]; 
} 

enter image description here

これは、ビュー層です。私はこのUIViewを追加しませんでした。 キャンセルボタンを押すことができず、ズームイン/ズームアウトできません。

私は唯一のiOS 11.

+0

bringSubViewToFront:セレクタを使用して、このビューの前面に移動しましたか? – NeverHopeless

+0

最後にこの解決策を見つけましたか? – Danny

答えて

0
- (IBAction)addPhoto:(UIButton *)sender { 

    UIImagePickerController *picker = [[UIImagePickerController alloc] init]; 
    picker.delegate = self; 
    picker.allowsEditing = YES; 
    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 

    [self presentViewController:picker animated:YES completion:NULL]; 
} 

このデリゲート使用に問題が持っているiOSの10には問題ありません: - 私はこの問題に対処するための良いアイデアを持っている

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 

    [picker dismissViewControllerAnimated:YES completion:NULL]; 

} 
+0

PUPhotoPickerHostViewControllerは、photo crop viewControllerです。このviewControllerには2つのボタンがあります。キャンセルボタンを押してボタンを選択します。キャンセルボタンは動作しません。PUPhotoPickerHostViewControllerのキャンセルボタンはデリゲートに関係ありません。 – s2s2

1

が。その後、UIImagePickerController以来UINavigationControllerDelegateを準拠し、UIImagePickerControllerのための代理人として、(あなたがUIImagePickerControllerを示しているから)コントローラを設定し

UINavigationControllerのサブクラスでは、メソッドを実装します。

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated { 
    if ([UIDevice currentDevice].systemVersion.floatValue < 11) { 
    return; 
    } 
    if ([viewController isKindOfClass:NSClassFromString(@"PUPhotoPickerHostViewController")]) { 
    weakify(viewController); 
    [viewController.view.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { 
     if (obj.frame.size.width < 42 && FLOAT_EQUAL(obj.frame.size.height, [[UIScreen mainScreen] bounds].size.height)) { 
     strongify(viewController); 
     [viewController.view sendSubviewToBack:obj]; 
     *stop = YES; 
     } 
    }]; 
    } 
} 
+0

フォーマットありがとう –

0

は、このコードを使用しますオープンフォトライブラリー:

 UIImagePickerController *pickerView = [[UIImagePickerController alloc] init]; 
     pickerView.allowsEditing = YES; 
     pickerView.delegate = self; 
     [pickerView setSourceType:UIImagePickerControllerSourceTypePhotoLibrary]; 
     [self presentViewController:pickerView animated:YES completion:nil]; 

そして、あなたのビューコントローラにトリミングされた画像を取得するには、このデリゲートを使用します。

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
    UIImage *chosenImage = info[UIImagePickerControllerEditedImage]; 
    UIImage *image = chosenImage; 
    [picker dismissViewControllerAnimated:YES completion:NULL]; 

} 
関連する問題