如何从animateWithDuration返回BOOL?

时间:2013-08-26 07:23:32

标签: objective-c block animatewithduration

我尝试创建方法并从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;
}

感谢提前。

2 个答案:

答案 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)。

您应该将此布尔值保留为动画类的成员,并在完成块中执行一个方法,以便在动画完成时处理此布尔值