11

因此,我正在尝试更新适用于 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

4 回答 4

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;
    }
}
于 2014-06-30T01:18:15.777 回答
8

您可以设置User Enteraction EnabledNO叠加视图;)对我有用

于 2016-11-03T21:55:32.963 回答
5

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

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

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

于 2013-11-25T11:27:56.043 回答
0

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

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

                 } completion:^(BOOL finished) {
                     [self.view removeFromSuperview];
                 }];
于 2013-11-16T17:32:13.230 回答