2014-02-18 64 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