1

cameraOverlayView として設定した UIView 内に UIButton があります。

また、画面全体をカバーするように uiimagepicker cameraView をスケーリングしました (下の図を参照)。

ここに画像の説明を入力

これが私のコードです:

 // CameraViewController.m

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    if(!self.imagePickerController)
        [self setupCamera];
}

-(void)setupCamera{
    self.imagePickerController = [[UIImagePickerController alloc] init];
    self.imagePickerController.modalPresentationStyle = UIModalPresentationCurrentContext;
    self.imagePickerController.delegate = self;
    self.imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
    self.imagePickerController.showsCameraControls = NO;

    self.imagePickerController.cameraOverlayView =  self.overlayView;

    [self scaleCameraPreview];

    // Present picker in the next loop (to avoid warning - "Presenting view controllers on detached view controllers is discouraged")
    [self performSelector:@selector(presentPicker) withObject:nil afterDelay:0.0];
}

-(void)presentPicker{
    [self presentViewController:self.imagePickerController animated:NO completion:nil];
}

-(void)scaleCameraPreview{
    CGSize screenSize = [[UIScreen mainScreen] bounds].size;

    int heightOffset = 0;

    if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
    {
        heightOffset = 120;
    }

    float cameraAspectRatio = 4.0 / 3.0;
    float imageWidth = floorf(screenSize.width * cameraAspectRatio);
    float scale = ceilf(((screenSize.height + heightOffset) / imageWidth) * 10.0) / 10.0;
    self.imagePickerController.cameraViewTransform = CGAffineTransformMakeScale(scale, scale);
}

-(IBAction)cameraButtonPressed:(id)sender{
    [self.imagePickerController takePicture];
}

そして、これはビューコントローラーの私の階層です:

- UINavigationController 
   - SWRevealViewController (manages a drawer functionality between different controllers)
     - UINavigationController (current controller for the camera)
       - CameraViewController 
         - PickerViewController (Presented modally as you can see above) 
           - PhotoTakenViewController (Controller that will fire after UIImagePicker returns an image)

編集: オーバーレイ情報の追加

ここに画像の説明を入力

同様のスレッドをオンラインで検索しました (例: UIImagePickerController Overlay Buttons Not Firing ) が、解決策が見つかりませんでした。

写真で見ることができる UIButton は UIView の中にあり、これは cameraOverlayView に割り当てられたコードの overlayView です。また、アウトレットを介して cameraButtonPressed: アクションに接続されており、UIImagePickerController を追加しなくても完全に機能します。

原因不明で何を触っても反応しません。

誰が何が起こっているのか知っていますか?

4

1 に答える 1

0

私は自分の問題を修正しましたが、大ざっぱな方法で信じています:

[self presentViewController:self.imagePickerController animated:NO completion:^(void){

    // Re-add the button so it is on top of the overlay
    [self.imagePickerController.view addSubview:self.takePhotoButton];
}];

おそらく後でこの問題に戻って、より良い解決策が見つかった場合に備えて更新を投稿します.

于 2014-12-16T07:15:30.060 に答える