Ios UIActivityIndicator的UIButton操作

Ios UIActivityIndicator的UIButton操作,ios,multithreading,uiimagepickercontroller,uiactivityindicatorview,Ios,Multithreading,Uiimagepickercontroller,Uiactivityindicatorview,我正试图处理这样一件事: 我有一个ui按钮操作,它正在调用UIImagePickerController并将其呈现给拍摄。但是加载需要一段时间,尤其是在第一次运行时。因此,我决定放置一个UIActivityIndicator,以便在加载相机时保持旋转 但是我遇到了一个问题-UIImagePicker正在加载主线程,因此指示器不会显示。我怎样才能解决这个问题 这是我的方法: - (IBAction)takePhoto:(UIButton *)sender { UIImagePickerCo

我正试图处理这样一件事:

我有一个
ui按钮
操作,它正在调用
UIImagePickerController
并将其呈现给拍摄。但是加载需要一段时间,尤其是在第一次运行时。因此,我决定放置一个
UIActivityIndicator
,以便在加载相机时保持旋转

但是我遇到了一个问题-
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];
}
试试这个:

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

     int64_t delayInSeconds = 2.0;//How long do you want to delay?
     dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
     dispatch_after(popTime, dispatch_get_main_queue(), ^(void){

         UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
         imagePicker.delegate = self;
         imagePicker.allowsEditing = YES;
         imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;

         [self presentViewController:imagePicker animated:NO completion:nil];
     });         
}
试试这个:

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

     int64_t delayInSeconds = 2.0;//How long do you want to delay?
     dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
     dispatch_after(popTime, dispatch_get_main_queue(), ^(void){

         UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
         imagePicker.delegate = self;
         imagePicker.allowsEditing = YES;
         imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;

         [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];
        });
    });
}

我也遇到过同样的问题,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];
        });
    });
}

我不确定。。。我只是猜测。。。我只想在装相机的时候显示这个指示器,让一切看起来干净漂亮。怎么能花更多的时间打开你的相机呢?我不认为我加载得很慢,你需要添加活动Indicator当我点击按钮时,它会保持高位大约3秒。然后介绍了选择器。你能再详细说明一下吗,因为我在示例中使用了你的代码块,那么在我的例子中,它工作得很好,打开iris需要时间camera@frozen_lion按我想要的方式回答了我的问题我不确定。。。我只是猜测。。。我只想在装相机的时候显示这个指示器,让一切看起来干净漂亮。怎么能花更多的时间打开你的相机呢?我不认为我加载得很慢,你需要添加活动Indicator当我点击按钮时,它会保持高位大约3秒。然后介绍了选择器。你能再详细说明一下吗,因为我在示例中使用了你的代码块,那么在我的例子中,它工作得很好,打开iris需要时间camera@frozen_lion我的问题得到了我想要的答案。这个问题正是我想要的。刚刚添加了这一行:
[self-presentViewController:imagePicker动画:未完成:^{[activityView停止动画制作];}]
以阻止此旋转死亡!这件正是我想要的。刚刚添加了这一行:
[self-presentViewController:imagePicker动画:未完成:^{[activityView停止动画制作];}]
以阻止此旋转死亡!