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)
您的问题:初始化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)
归档时间: |
|
查看次数: |
7034 次 |
最近记录: |