我在iPhone应用程序中为摄像机视图设计了虹膜快门动画.
不幸的是,即使我隐藏相机控件并创建自定义cameraOverlayView,在视图出现时似乎也无法隐藏Apple的快门.
通过使用UIImagePickerController的viewWillAppear和viewDidAppear方法,当视图出现时,我通过在正常快门顶部设置快门动画来解决这个问题.但是,我第一次无法将快门隐藏在我的快门下.当应用程序启动时,它会显示摄像机视图,并且可以看到原始快门.在cameraController的所有后续视图中,我的解决方法都有效.有什么建议?
这是我的代码.这是来自我的app委托:
- (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];
}
最佳答案 请注意,文档说不支持子类化UIImagePickerController,因此它可能在某些情况下有效但不“安全”.不确定它是否会被应用商店拒绝. (可能取决于他们的静态代码验证工具有多挑剔.)
我真的没有一个好的答案,但你可以尝试1)迭代选择器主视图的子视图,看看你是否可以识别用于为快门设置动画的任何东西,然后将其修改以使其不会显示,或2)对于初始动画,只需在另一个不透明的黑色视图下显示初始图像选择器主视图.不确定用户指定的覆盖视图是否适用于此,但您可以在没有子类化的情况下执行这些操作.
搜索未记录的子视图是理论上不安全的另一件事,因为谁知道将来如何改变实现.