ios - 带有 UIActivityIndi​​cator 的 UIButton Action

标签 ios multithreading uiimagepickercontroller uiactivityindicatorview

我正在尝试处理这样的事情:

我有一个 UIButton 操作,它调用 UIImagePickerController 并显示它进行拍摄。但是加载需要一段时间——尤其是在第一次运行时。所以我决定放置一个 UIActivityIndi​​cator 以在加载相机时保持旋转。

但我遇到了一个问题 - UIImagePicker 正在主线程中加载,因此指示器不会显示。我该如何解决这个问题?

这是我的方法:

- (IBAction)takePhoto:(UIButton *)sender
{
    UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
    imagePicker.delegate = self;
    imagePicker.allowsEditing = YES;
    imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;

    UIActivityIndicatorView *activityView=[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    activityView.center=self.view.center;
    [self.view addSubview:activityView];
    [activityView startAnimating];

    [self presentViewController:imagePicker animated:NO completion:nil];
}

最佳答案

我遇到了同样的问题,UIImagePickerController 分配需要很多时间,所以为了避免主线程阻塞,你可以使用下一个代码:

- (IBAction)takePhoto:(UIButton *)sender
{
    UIActivityIndicatorView *activityView=[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    activityView.center=self.view.center;
    [self.view addSubview:activityView];
    [activityView startAnimating];

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
        imagePicker.delegate = self;
        imagePicker.allowsEditing = YES;
        imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;

        dispatch_async(dispatch_get_main_queue(), ^{
            [self presentViewController:imagePicker animated:NO completion:nil];
        });
    });
}

关于ios - 带有 UIActivityIndi​​cator 的 UIButton Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18356205/

相关文章:

iphone - 启用 UIImagePickerController 视频压缩

iphone - 快门动画上方的 cameraOverlayView

ios - WatchKit 接口(interface) : set button in same horizontal line

c++ - 有人可以解释 Mutex 及其使用方法吗?

ios - 在 UIViewController 中使用 UITableView 的搜索栏

java - 在多个线程中使用相同的 OpenGL 上下文

java - java中如何查找当前拥有锁的线程

objective-c - iPad 模拟器不适用于 iPhone 应用程序中的 UIImagePickerController

ios - UITextField:更改禁用文本字段的外观

objective-c - ViewController 仅调用一次 TouchMoved