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

时间:2013-09-26 03:07:47

标签: uiimagepickercontroller ios7 photo

所以我正在尝试更新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];

}

4 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分:5)

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

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

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

答案 2 :(得分:5)

您可以在叠加视图上将User Enteraction Enabled设置为NO;)适合我

答案 3 :(得分:0)

在完成叠加后拍摄照片或动画时,我通过从超级视图中删除叠加层来实现它。

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

                 } completion:^(BOOL finished) {
                     [self.view removeFromSuperview];
                 }];