我有一个透明的视图,上面用CoreGraphics绘制了一个矩形。当相机启动时,自定义覆盖视图位于快门动画之上。你看到的是标准的相机快门,上面有一个自定义的矩形。我如何让它放在正确的位置,在快门动画的下面?我看过其他示例代码,但它是针对OS3.1的,似乎没有任何不同之处。
下面是我的代码:
-(IBAction)cameraButton{
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerCameraDeviceRear]){
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
//Add the OverlayView with the custom Rectangle
CGRect overlayFrame = CGRectMake(0.0f, 0.0f, 320.0f, 480.0f);
OverlayView *overlayView = [[OverlayView alloc]initWithFrame:overlayFrame];
picker.cameraOverlayView = overlayView;
[overlayView release];
[self presentModalViewController:picker animated:YES];
[picker release];
}
}发布于 2013-03-05 16:35:03
在iPad上,这个问题不存在,默认情况下,覆盖视图位于快门动画后面。但在iPhone上,覆盖显示在前面。
我找到了一个对我有效的解决方案。
在此方法中,您必须将覆盖视图设置为子视图:
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
if (!viewController)
return;
UIView* controllerViewHolder = viewController.view;
UIView* controllerCameraView = [[controllerViewHolder subviews] objectAtIndex:0];
UIView* controllerPreview = [[controllerCameraView subviews] objectAtIndex:0];
[controllerCameraView insertSubview:self.overlayView aboveSubview:controllerPreview];
}希望能有所帮助
原文来源:http://www.alexcurylo.com/blog/2009/06/18/uiimagepickercontroller-in-3-0/
发布于 2011-03-27 02:52:43
除了你已经在做的事情,你不能做其他的事情;如果iOS决定把你的覆盖视图放在快门上,你只能接受它(除非你想冒着被应用商店拒绝的风险)。
作为一种不完美的解决方法,您可以使用alpha=0开始覆盖,然后在一两秒后将alpha设置为1。但快门在“打开”之前没有设定的时间段(我认为这取决于初始化相机硬件所需的时间),所以有时你的界面可能要到很晚才出现,有时可能出现得太早。
发布于 2011-05-13 07:47:26
从4.3.3开始,快门动画被打破,因为元素显示在顶部,然后在动画开始时捕捉到下方。我已经把这个作为雷达提交了:http://openradar.appspot.com/radar?id=1204401
https://stackoverflow.com/questions/5439130
复制相似问题