2013-09-26 218 views
10

因此,我试图更新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]; 

} 
+0

picker.allowsEditing = YES; – Rajneesh071

回答

0

拍照,或您的覆盖动画完成后,我做了它从它的父去除覆盖工作。

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

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

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

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

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

+0

或者你可以在Overlay View上设置User Enteraction为NO;)对我来说 – Vahan

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; 
    } 
} 
+0

这些观察者在捕获“Retake”和“Use Preview”点击时有巨大的帮助。你会认为Apple会为这些人提供回调。 – whyoz

+0

谢谢!!!它工作正常! – alones

+0

谢谢。但是,当我重拍照片叠加层不显示时,对于解决方案,我只是在addCameraOverlay和removeCameraOverlay中将内容分别设置为self.cameraPicker.cameraOverlayView.hidden = NO和self.cameraPicker.cameraOverlayView = YES。 – VVJ

5

您可以设置User Enteraction EnabledNO上重叠视图;)对我的作品

+1

是的,这是行之有效的:) –