iphone - 在 UIImagePickerController 中隐藏快门

标签 iphone objective-c cocoa-touch uikit

我为 iPhone 应用程序中的相机 View 设计了一个虹膜快门动画。

不幸的是,即使我隐藏相机控件并创建自定义 cameraOverlayView,似乎也无法在 View 出现时隐藏 Apple 的快门。

当 View 出现时,我通过使用 UIImagePickerController 的 viewWillAppear 和 viewDidAppear 方法在普通快门之上设置我的快门动画来解决这个问题。但是,我无法在第一次通过时将百叶窗隐藏在我的百叶窗下。当应用程序启动时,它会显示相机 View ,并且可以看到原始快门。在 cameraController 的所有后续 View 中,我的解决方法都有效。有什么建议吗?

这是我的代码。这是来 self 的应用程序委托(delegate):

- (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) 遍历选取器主视图的 subview ,看看你是否可以识别用于为快门设置动画的任何内容,然后对其进行处理,以便它不会显示,或者 2) 对于初始动画,仅在另一个不透明的黑色 View 下显示初始图像选择器主视图。不确定用户指定的叠加 View 是否适用于此,但您可以在不进行子类化的情况下执行这些操作。

搜索未记录的 subview 是另一件理论上不安全的事情,因为谁知道 future 的实现可能会如何改变。

关于iphone - 在 UIImagePickerController 中隐藏快门,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2010602/

相关文章:

objective-c - 给定一个 webView,如何更改不同类文件中的 URL?

iphone - 提交后如何更改iPhone应用程序的主要类别?

iphone - 遇到分配/释放问题

ios - 将相册中的照片添加到应用程序中以在 tableView 中显示 - IOS

objective-c - 将 '__unsafe_unretained id *' 转换为 'const void **'

ios - 从值中获取数字的最短方法

objective-c - 强制对象在 ARC 下解除分配

objective-c - 从服务器检索更新后重新加载(表) View

iphone - 如何将数字输入掩码应用于 Objective-c 中的 UITextField

ios - 使用 UIWebView 而不是 native UI 元素来显示复杂的响应式布局是一个好习惯吗?