如何知道UIImagePickerController的“iris”启动动画是否结束?

3
我有一个选项卡应用程序,在其中一个选项卡中将显示UIImagePickerController以从相机获取图片。我使用了一个覆盖视图,但是当相机需要近3秒钟来“打开”irs(启动动画)时,我的覆盖视图已经可见,而且在关闭的iris上方!!!
我需要检查如何测试iris是否仍然关闭,以便我可以隐藏覆盖视图。
我阅读了一些关于子类化UIImagePickerController的帖子,但苹果表示我们不应该这样做wifh UIImagePickerController。
有人有线索吗?
1个回答

0

虹膜动画在[UIImagePickerController viewDidAppear]方法上触发。苹果公司不鼓励为各种原因而子类化UIImagePickerController,但如果您需要在虹膜动画完成后添加覆盖层并且不想编写自己的AVFoundation图像捕获类,我会这样做:

如果您还没有,请添加一个新的UITabBarViewController子类,其中包含一个UIImagePickerController @propertyUIImagePickerControllerDelegateUINavigationControllerDelegate委托。

@interface my_TabBarViewController : UITabBarController <UIImagePickerControllerDelegate, UINavigationControllerDelegate>
@property (nonatomic, strong) UIImagePickerController *picker;

在实现中,添加一个名为initCamera的方法,并在viewDidLoad中调用它。
- (void)initCamera
{

  _picker                     = [[UIImagePickerController alloc] init];
  _picker.sourceType          = UIImagePickerControllerSourceTypeCamera;
  _picker.view.frame          = CGRectMake(0.f, 20.f, 320.f, 499.f);
  _picker.navigationBarHidden = TRUE;
  _picker.delegate            = self;
  _picker.cameraOverlayView   = YourCameraOverlayView;
  [self.view addSubview:_picker.view];
  [_picker viewDidAppear:FALSE];

  [self.view sendSubviewToBack:_picker.view];

}

然后,当您的相机视图选项卡被点击时,请使用类似于以下方法在选项卡控制器上显示相机:

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
{
  NSLog(@"tapped: %@", item.title);

  if ([item.title isEqualToString:@"Camera"]) {
    [self.view bringSubviewToFront:_picker.view];
  } else {
    [self.view sendSubviewToBack:_picker.view];
  }
}

最后,在您的选项卡栏控制器上的UIImagePickerController委托方法中,清理图像选择器,并将信息字典发送到您的相机视图控制器以处理所需的图像:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
  [_picker.view removeFromSuperview];

  yourCameraViewController *camVC = (yourCameraViewController*)[self.viewControllers objectAtIndex:1];
  // Index 1 would just be the second tab, adjust accordingly
  [camVC imagePickerController:picker didFinishPickingMediaWithInfo:info];

  [self initCamera];
}

这里调用[self initCamera];会重新初始化UIImagePickerController,这可能是您想要做的,也可能不是。我可能只会在您的yourCameraViewController中导入#import "my_TabBarViewController.h,然后通过调用以下方法在UIImagePickerController委托方法中获取指向picker的指针:
my_TabBarViewController *tabBarVC = (my_TabBarViewController*)self.tabBarController;

并且让yourCameraViewController关闭它并向tabBarVC发送消息,以便在需要时重新初始化UIImagePickerController


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接