拍摄照片后无法选择使用照片或重拍

Por*_*Jon 11 photo uiimagepickercontroller ios7

所以我正在尝试更新iOS 7的应用程序,我遇到了自定义叠加层的问题.叠加层是我正在构图的图像(实时和使用全分辨率版本来构建相机胶卷中的最终结果).问题是,现在,在iOS 7下,覆盖层虽然底部透明,但可以访问常规的"拍照"按钮,但出于某种原因不允许我点击"使用照片"或"重新拍摄"按钮图片被拍下后出现.这是调用视图控制器的代码片段:

- (IBAction)takePhoto:(UIButton *)sender {

UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsEditing = NO;
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
picker.showsCameraControls = YES;

// Overlay Creation
UIView* overlayView = [[UIView alloc] initWithFrame:picker.view.frame];
    overlayView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"PBOverlayView.png"]];
    [overlayView.layer setOpaque:NO];
    overlayView.opaque = NO;

picker.cameraOverlayView = overlayView;

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

}
Run Code Online (Sandbox Code Playgroud)

jon*_*wah 12

另一种方法是在ImagePicker更改状态时观察通知,并在进入"使用照片"屏幕时删除(或禁用)叠加层.

- (void) addPhotoObservers {
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(removeCameraOverlay) name:@"_UIImagePickerControllerUserDidCaptureItem" object:nil ];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(addCameraOverlay) name:@"_UIImagePickerControllerUserDidRejectItem" object:nil ];
}

- (void) removePhotoObservers {
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

-(void)addCameraOverlay {
    if (self.cameraPicker) {
        self.cameraPicker.cameraOverlayView = self.myCameraOverlayView;
    }
}

-(void)removeCameraOverlay {
    if (self.cameraPicker) {
        self.cameraPicker.cameraOverlayView = nil;
    }
}
Run Code Online (Sandbox Code Playgroud)


Vah*_*han 6

您可以设置User Enteraction EnabledNO覆盖视图;)适合我


o.s*_*hnn 5

您的问题:初始化overlayView时,您将帧设置为与选择器的大小相同. UIView* overlayView = [[UIView alloc] initWithFrame:picker.view.frame];

说明:在捕获图像之前,相机按钮位于overlayView的前景中,因此按下它们没有问题.捕获图像后(在"重拍/使用预览页面"上),overlayView是前景中的一个,因此阻止了对按钮的访问.我知道这是iOS7上的一个问题,并不确定其他版本.

可能的解决方案:由于这是Apple的UIImagePickerController中的本机问题,我只能想到两个解决方案:(1)如果可能,将overlayView配置为具有不覆盖拾取器底部的较短帧; (2)如果你需要覆盖覆盖这些按钮,你仍然有令人筋疲力尽的配置选项,self.imagePicker.showsCameraControls = NO;但是你必须自定义所有的摄像机行为(你可以在网上找到很多这样的例子).


小智 0

拍摄照片或叠加层上的动画完成后,我通过从其超级视图中删除叠加层使其工作。

[UIView animateWithDuration:1
                      delay:1
                    options:UIViewAnimationOptionCurveEaseOut
                 animations:^{

                 } completion:^(BOOL finished) {
                     [self.view removeFromSuperview];
                 }];
Run Code Online (Sandbox Code Playgroud)