我在iPhone应用程序中为相机视图设计了一个虹膜快门动画。
不幸的是,即使我隐藏相机控件并创建自定义cameraOverlayView,也无法在视图出现时隐藏Apple的快门。
通过使用UIImagePickerController的viewWillAppear和viewDidAppear方法,在视图出现时,通过在正常快门顶部设置快门动画来解决这个问题。但是,我第一次无法将快门隐藏在我的快门下。当应用程序启动时,它会显示摄像机视图,并且可以看到原始快门。在cameraController的所有后续视图中,我的解决方法都有效。有什么建议吗?
这是我的代码。这是来自我的应用代表:
- (void)applicationDidFinishLaunching:(UIApplication *)application {
cameraController = [[CameraController alloc] initWithMode:@"camera"];
[window addSubview:cameraController.view];
}
这是来自我的UIImagePickerController子类:
- (void) viewWillAppear:(BOOL)animated {
if (self.sourceType != UIImagePickerControllerSourceTypePhotoLibrary || simulatorView) {
[self addShutter];
[shutter close];
}
[super viewWillAppear:animated];
}
- (void) viewDidAppear:(BOOL)animated {
if (self.sourceType != UIImagePickerControllerSourceTypePhotoLibrary || simulatorView) {
[shutter openShutter:.5f];
}
[super viewDidAppear:animated];
}
答案 0 :(得分:2)
请注意,文档说不支持子类化UIImagePickerController,因此它可能在某些情况下有效但不“安全”。不确定它是否会被应用商店拒绝。 (可能取决于他们的静态代码验证工具有多挑剔。)
我真的没有一个好的答案,但是您可以尝试1)迭代选择器主视图的子视图,看看是否可以识别用于为快门设置动画的任何内容,然后将其修改以便它将不显示,或2)对于初始动画,只需在另一个不透明的黑色视图下显示初始图像选择器主视图。不确定用户指定的覆盖视图是否适用于该视图,但您可以在没有子类化的情况下执行这些操作。
搜索未记录的子视图是理论上不安全的另一件事,因为谁知道将来如何改变实现。
答案 1 :(得分:0)
可能为时已晚,但我的建议是使用以下通知(在调试时找到)
用法很简单:在第一次通知时调用UIGetScreenImage(),在UIImagePicker上方的屏幕(全屏)上渲染抓取的图像。在第二次通知中销毁渲染图像。
答案 2 :(得分:0)
我尝试同样的事情没有结果,所以我做了解决方法:
1-假设你有一个名为showAllButtons的方法,没有参数可以显示你所有的自定义内容(按钮,工具栏......) 2-初始化隐藏的所有自定义控件 3-编写一个方法,在一个区间内调用最后一个函数:
-(void)showAllButtonsDelayed:(NSTimeInterval)a_iMsToDelay
{
NSTimer* tmpShowButtonsTimer = [NSTimer timerWithTimeInterval:a_iMsToDelay target:self selector:@selector(showAllButtons) userInfo:nil repeats:NO];
[[NSRunLoop currentRunLoop] addTimer:tmpShowButtonsTimer forMode:NSDefaultRunLoopMode];
}
4-在UIImagePickerController子类的willDidAppear方法中调用该方法。使用a_iMsToDelay的某些值进行播放。
希望这有帮助。