我尝试创建方法并从animateWithDuration返回BOOL类型。但是在完成块上似乎没有检测到我的对象。有人可以向我解释,为什么会发生这种情况?
+ (BOOL)showAnimationFirstContent:(UIView *)view {
BOOL status = NO;
CGRect show = [SwFirstContent rectFirstContentShow];
[UIView animateWithDuration:DURATION
delay:DELAY
options:UIViewAnimationOptionBeginFromCurrentState
animations:^{ view.frame = show; }
completion:^( BOOL finished ) {
status = YES;
}];
return status;
}
感谢提前。
答案 0 :(得分:3)
您正在将要异步执行的块中设置状态值。这意味着,在执行块之后,不保证返回语句。要知道动画何时结束,您需要以不同的方式声明您的方法。
+ (void)showAnimationFirstContent:(UIView *)view completion:(void (^)(void))callbackBlock{
CGRect show = [SwFirstContent rectFirstContentShow];
[UIView animateWithDuration:DURATION
delay:DELAY
options:UIViewAnimationOptionBeginFromCurrentState
animations:^{ view.frame = show; }
completion:^( BOOL finished ) {
callbackBlock();
}];
}
你可以这样调用这个方法:
[MyClass showAnimationFirstContent:aView completion:^{
//this block will be executed when the animation will be finished
[self doWhatEverYouWant];
}];
您可能想要了解更多block works的内容。
希望这有帮助。
答案 1 :(得分:2)
由于块是异步执行的,因此会发生这种情况。这意味着在执行animateWithDuration
方法后,showAnimationFirstContent
方法将继续执行(在这种情况下返回),而不等待动画完成(并将布尔值更改为YES
)。
您应该将此布尔值保留为动画类的成员,并在完成块中执行一个方法,以便在动画完成时处理此布尔值