[英]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.