0

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

我的函数移动视图上的所有子视图。
这是它的样子:

- (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标志,它们还是“跳”回了里面。我也尝试过覆盖委托方法并在完成后手动设置位置,但没有运气。

任何想法我做错了什么?

4

2 回答 2

2

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

于 2012-11-15T18:46:50.417 回答
2

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

[yourView layer].position = endPos;
于 2012-11-15T19:23:22.433 回答