2014-02-18 65 views
0

当我第一次从调度队列调用下面的代码时,完成块没有调用。UIView动画完成块未调用

- (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方法。

请让我知道。

+0

也许你可以把dispatch_async(initialize_queue ... – Wonil

回答

4

所有与GUI连接的应该从主线程调用/推送到主队列。在其他情况下,预期的行为不能保证。

所以,你应该总是使用异步执行的,所以我不认为你真的需要为它单独的队列

dispatch_get_main_queue() 

而且动画。

+0

)里面的[self startProgress]再次放到主调度队列中,我用performSelectorOnMainThread来解决问题。 – nao0811ta