1

我想做一个无休止的动画(例如,让一个视图在两个位置之间无休止地移动)

我想知道这是否是递归,是否会导致堆栈溢出?伪代码:

-(void)doAnimation {
    [UIView animateWithDuration:1.0
            delay:0.0
            options:(UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionAllowUserInteraction)
            animations:^{
                if(view is at Position A){ 
                    set frame to Postion B;
                }else{
                    set frame to Positon A;
                }
            }
            completion:^(BOOL finished){
                [self doAnimation];
            }
     ];
}

提前致谢

狮子座

4

2 回答 2

4

当你的完成被调用时,调用堆栈已经展开到主运行循环,所以,不,你不会得到任何堆栈溢出,只是一些无限动画。

于 2012-09-11T07:49:04.200 回答
1

这是执行重复动画的错误方法。查看动画选项UIViewAnimationOptionRepeatUIViewAnimationOptionAutoreverse而不是(文档,请参阅末尾的常量)您的动画可以重写如下:

-(void)doAnimation {
    [UIView animateWithDuration:1.0
            delay:0.0
            options:(UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionAllowUserInteraction |UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse)
            animations:^{
                set frame to Position B;
                }
            }
            completion:nil
            }
     ];
}

假设您的视图从位置 A 开始。

于 2012-09-11T08:03:00.693 回答