gpt4 book ai didi

animation - 如何知道UIImagePickerController的 "iris"开始动画结束了?

转载 作者:行者123 更新时间:2023-12-01 06:45:33 26 4
gpt4 key购买 nike

我有一个选项卡式应用程序,其中一个选项卡将显示一个 UIImagePickerController 以从相机获取照片。我使用叠加 View ,但是当相机花费将近 3 秒的时间“打开”“irs”(开始动画)时,我的叠加 View 已经可见,在关闭的虹膜上方!!!

我需要检查如何测试虹膜是否仍然关闭,以便隐藏叠加 View 。

我读了一些关于子类化 UIImagePickerController 的帖子,但是苹果说我们不应该使用 UIImagePickerController 做那个。

有人知道吗?

最佳答案

虹膜动画在 [UIImagePickerController viewDidAppear] 方法上触发。 Apple 出于各种原因不鼓励子类化 UIImagePickerController,但是如果您需要在虹膜动画完成后添加叠加层并且不愿意使用 AVFoundation 编写自己的图像捕获类,我会这样做:

如果您还没有,请添加一个新的 UITabBarViewController 子类和一个 UIImagePickerController @property 以及 UIImagePickerControllerDelegateUINavigationControllerDelegate

@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];

}

然后当您的相机 View 选项卡栏项目被点击时,在您的选项卡栏 Controller 上使用如下方法显示相机:

- (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];
}
}

最后,在标签栏 Controller 的 UIImagePickerController 委托(delegate)方法中,清理图像选择器,并将信息字典发送到相机 View Controller 以处理图像,但您需要:

- (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 的指针 通过调用委托(delegate)方法:

my_TabBarViewController *tabBarVC = (my_TabBarViewController*)self.tabBarController;

并让 yourCameraViewController 关闭它并在您再次需要它时向 tabBarVC 发送消息以重新初始化 UIImagePickerController

关于animation - 如何知道UIImagePickerController的 "iris"开始动画结束了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5836096/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com