繁体   English   中英

UIView动画完成块未调用

[英]UIView animation completion block not called

当我第一次从调度队列中调用以下代码时,未调用完成块。

- (void)viewDidLoad
{
    [super viewDidLoad];
    dispatch_queue_t initialize_queue;
    initialize_queue = dispatch_queue_create("init", NULL);
    dispatch_async(initialize_queue, ^{
        _onInit = YES;
        _isRunning = NO;
        [self startProgress];
        _onInit = NO;
    });
} 

 - (void)startProgress
 {
  if (!_isRunning) {
    _isRunning = YES;
    NSLog(@"Starting");
    [UIView animateWithDuration:0.5 animations:^{
        self.progressStatusButton.hidden = NO;
        self.activityLeftConstraint.constant = _activityLeftSpace;
        self.activityWidthConstraint.constant = _activityWidth;
        self.buttonWidthConstraint.constant = _progressStatusButtonWidth;
        self.buttonLeftConstraint.constant = _progressStatusButtonLeftSpace;
        self.activityView.alpha = 1.0;
    }completion:^(BOOL finished){
        NSLog(@"Start Animating");
        [self.activityView startAnimating];
    }];
  }
 }

当我删除dispatch_aync方法并在viewDidLoad执行startProgress方法时,
完成块称为。 我应该如何更正我的代码?
我试图将dispatch_async更改为使用dispatch_async(dispatch_get_main_queue(),..)
然后调用完成块,但我想异步执行startProgress方法。

请告诉我。

与GUI连接的所有内容都应从主线程调用/推入主队列。 在其他情况下,无法保证预期的行为。

所以你应该使用

dispatch_get_main_queue()

动画也总是异步执行的,所以我认为您真的不需要单独的队列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM