动画UIView - 如何跟踪位置?

时间:2012-03-30 16:52:09

标签: iphone objective-c core-animation

我动画(移动)一个子类化的UIImageView,如下所示:

[UIView beginAnimations:nil context:NULL];  
[UIView setAnimationDuration: 1];  
[UIView setAnimationDelay:0];
[UIView setAnimationCurve: UIViewAnimationCurveEaseOut];  
[UIView setAnimationBeginsFromCurrentState:YES]; 
if (position == 0) position = 1;
if (position > 6) position--;    
self.transform = CGAffineTransformMakeTranslation(position*120, 0);
[UIView commitAnimations];

然后,我想突然强调它:

CAKeyframeAnimation *bounce = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
CATransform3D forward = CATransform3DMakeScale(1.3, 1.3, 1);
CATransform3D back = CATransform3DMakeScale(0.7, 0.7, 1);
CATransform3D forward2 = CATransform3DMakeScale(1.2, 1.2, 1);
CATransform3D back2 = CATransform3DMakeScale(0.9, 0.9, 1);
[bounce setValues:[NSArray arrayWithObjects:
                   [NSValue valueWithCATransform3D:CATransform3DIdentity],
                   [NSValue valueWithCATransform3D:forward],
                   [NSValue valueWithCATransform3D:back],
                   [NSValue valueWithCATransform3D:forward2],
                   [NSValue valueWithCATransform3D:back2],
                   [NSValue valueWithCATransform3D:CATransform3DIdentity],
                   nil]];
[bounce setDuration:0.6];
[[super layer] addAnimation:bounce forKey:@"bounceanimation"];

这一切都有效。它会被120像素移动,但是当调用脉动代码时,它会在其原始位置产生脉动,而不是在我移动它的位置。为什么这样,我怎么能改变呢?

托拜厄斯

2 个答案:

答案 0 :(得分:1)

好的,这是你的问题:

self.transform = CGAffineTransformMakeTranslation(position*120, 0);

请注意,您将视图转换为其他位置,但与任何转换一样,对象的原始统计信息保持不变。

您所要做的就是将该代码转换为setFrame:方法,以便实际移动图像。

答案 1 :(得分:0)

别担心!只需添加此

   bounce.fillMode = kCAFillModeForwards;

它会让你的动画停留在终点。