CABasicAnimation - 视图应位于最后一帧

时间:2015-08-04 20:30:02

标签: objective-c iphone ios7 xcode6 cabasicanimation

你好我想做一个CABasicAnimation旋转,我的视图旋转440度。在animatin之后,我不想将视图重置为旧位置。它应该在动画的最后一帧上的相同位置。

CABasicAnimation * rotate = [CABasicAnimation animationWithKeyPath:@“transform.rotation”];

rotate.toValue = [NSNumber numberWithFloat:degrees / 180.0 * M_PI];
rotate.duration = 4.4;
[rotate setFillMode:kCAFillModeForwards];
UIView *animationView = [self getBGContainerViewForSender:sender];
[animationView.layer addAnimation:rotate forKey:@"myRotationAnimation"];</i>

有人能告诉我如何在最后一帧上定位视图吗?

2 个答案:

答案 0 :(得分:1)

创建动画并将其添加到图层时,不会更改对象中的任何值。因此,在您的情况下,animationView的transform属性不会更改。因此,当动画结束时,视图将快照回到旧位置。要解决这个问题,你必须做两件事:

  1. 在添加动画之前,请将视图图层的transform属性设置为动画完成时所需的值。但是,这会向图层添加隐式动画,因此您需要终止隐式动画。要做到这一点:

  2. 添加动画方法中forKey:的值必须是动画的名称,在本例中为&#34; transform&#34;。此名称将使用显式动画替换用于变换的隐式动画。

  3. 添加:

      

    animationView.layer.transform = CA3DTransformMakeRotate(....);

    并将添加动画调用更改为

      

    [animationView.layer addAnimation:rotate   forKey:@&#34;变换&#34;];

    这在WWDC 2010,核心动画实践第1部分,大约39:20中进行了解释。

答案 1 :(得分:0)

在启动动画之前进行如下交易:

[CATransaction begin];
[CATransaction setValue:kCFBooleanTrue forKey:kCATransactionDisableActions];
CATransform3D current = animationView.layer.transform;
animationView.layer.transform = CATransform3DRotate(current, numberWithFloat:degrees / 180.0 * M_PI, 0, 1.0, 0);
[CATransaction commit];

/* YOUR ORIGINAL CODE COMES HERE*/