这是混乱与核心动画公共点。 A CAAnimation
实际上并未更改图层的后备“模型”属性。它只是改变了图层对用户的显示方式。所以你的toValue
从来没有设置在你的图层上,你需要自己做。您可以在动画开始之前或之后执行此操作。您的新值将被设置,但用户在动画结束之前不会看到它。一个人为的例子:
CABasicAnimation *rotate = [CABasicAnimation animationWithKeyPath:@"transform"];
rotate.fromValue = [NSValue valueWithCATransform3D:myLayer.transform];
rotate.toValue = [NSValue valueWithCATransform3D:CATransform3DRotate(myLayer.transform, M_PI, 0.f, 0.f, 1.f)];
rotate.duration = .5f;
myLayer.transform = CATransform3DRotate(myLayer.transform, M_PI, 0.f, 0.f, 1.f);
[myLayer addAnimation:rotate forKey:@"transform"];
两个重要的部分是设置在该层上的性质和使用该属性名作为在addAnimation:forKey:
键。不要担心隐式动画。在内部,CALayer
将其所有动画保存在以属性名称为关键字的字典中,并且当您添加新动画时,它将取消并替换指定键/属性的任何现有动画。
此外,我不能告诉你是否需要滑动手势的帮助,但如果你还没有,你应该检查出UIPanGestureRecognizer
。它提供了一个方便的方法,它将为您提供一个以每秒点数表示的平移方向的二维矢量。我有一些gesture recognizer sample code up on github可能会有所帮助。
这是你在那里创建的一个令人敬畏的微调。 :) – 2011-01-05 17:04:45