CABasicAnimation在完成后重置

时间:2012-11-15 18:42:53

标签: objective-c ios uiview cabasicanimation quartz-core

是的,我知道这是一个很多问题的问题,但我仍然无法让它发挥作用。

我的功能会移动视图上的所有子视图 这就是它的样子:

- (void)moveTo:(NSInteger)side
{
    CABasicAnimation *animation = [CABasicAnimation animation];
    animation.duration = 0.8f;
    animation.autoreverses = NO;
    animation.removedOnCompletion = NO;
    animation.fromValue = [NSNumber numberWithFloat:0];

    switch (side)
    {
        case kMovementSideDown: animation.toValue = [NSNumber numberWithFloat:568]; break;
        case kMovementSideUp: animation.toValue = [NSNumber numberWithFloat:-568]; break;
    }


    for (UIView *view in [self.view subviews])
    {
        [[view layer] addAnimation:animation forKey:@"transform.translation.y"];
    }
}

而且我知道这会将所有物品移到4英寸屏幕外面,这就是我想要的 但是在它移动物品之后,尽管我设置了removedOnCompletion = 0标志,但它们仍“跳回”。我也尝试重写委托方法并在完成后手动设置位置,但没有运气。

任何想法我做错了什么?

2 个答案:

答案 0 :(得分:2)

由于您正在为图层的transform属性设置动画,因此您应该检查还有哪些内容可以将其重置为CATransform3DIdentity(默认)状态。但为什么不使用简单的[UIView animateWithDuration:]方法为视图的框架设置动画?

答案 1 :(得分:2)

您需要在开始动画之前设置图层的“结束”位置,以免它跳回来。

[yourView layer].position = endPos;