3

UIImagePickerController( ) を使っphotoPickerてカメラで写真を撮り、その写真を編集 ( allowEditing = YES) します。ユーザーは のボタンでカメラとライブラリを切り替えることができますが、編集モードのphotoPicker.viewときはこのボタンを削除したいと考えています。photoPicker

ピッカーではphotoLibrarySourceType、プッシュを使用して編集モードを表示するため、次の方法で機能します。

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if (navigationController == photoPicker) {
        NSLog(@"navigation ");
        if ([navigationController.viewControllers indexOfObject:viewController] == 1)
        {
            // If second UIViewController, set your overlay.
            NSLog(@"editing");
        }
    }
}

ただし、cameraSourceTypeでは、カメラと編集モード間のナビゲーションはありません。

4

1 に答える 1

0

ちょっとしたハックを思いついたのですが、うまくいきました。まだ少し新しいので、別の方法が見つからなかったので、自由に最適化してください。

基本的な考え方は、[uiimagepickercontroller takePicture] を呼び出すメソッドを実行する、デフォルトのカメラ ボタンの上に非表示のボタンを作成することです。

これが私のサンプルコードです

@implementation myViewController
{
    UIImagePickerController *myImagePickerController; 
    UIButton * fakeCameraButton;


}

- (IBAction)showImagePicker:(id)sender{

    // accessible camera validations implied
    myImagePickerController = [[UIImagePickerController alloc]init];
    myImagePickerController.sourceType=UIImagePickerControllerSourceTypeCamera;       
    myImagePickerController.showsCameraControls = YES;
    myImagePickerController.delegate=self;
    myImagePickerController.allowsEditing=YES; 

    CGFloat myViewHeight = 100; // you play around with the positions to get your desired frame size. This worked for me
    UIView * myView = [[UIView alloc] initWithFrame:CGRectMake(0, myImagePickerController.view.frame.size.height - myViewheight, picker.view.frame.size.width, myViewheight)];

   fakeCameraButton = [[UIButton alloc] initWithFrame:CGRectMake(myView.frame.size.width / 2 - 30, myView.frame.size.height/2-15, 60, 60)];// position it over the default camera button
   [fakeCameraButton addTarget:self action:@selector(cameraButtonPressed) forControlEvents:UIControlEventTouchUpInside];
   [fakeCameraButton setTitle:@"" forState:UIControlStateNormal];

   [myView addSubview:fakeCameraButton];
   myImagePickerController.cameraOverlayView = myView;
   [self presentViewController:myImagePickerController animated:YES completion:nil];


}

-(void)cameraButtonPressed{

    // Make sure you check if camera is ready before this method. 
   [myImagePickerController takePicture];

    // you are in editing/preview mode here if allowsEditing = YES

    // you can remove all your custom overlay views by
    myImagePickerController.cameraOverlay = nil



} 

前に言ったように、カメラの準備ができているかどうかを確認してください。その方法については、stackoverflow で回答を見つけることができます。

このコードはうまくいかない可能性があるため、編集または代替ソリューションを歓迎します。

iOS dev について詳しく知り、質問するのを手伝ってくれる開発者の仲間が必要です。誰か興味がありますか?

于 2014-05-29T17:12:21.730 に答える