你好我想做一个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>
有人能告诉我如何在最后一帧上定位视图吗?
答案 0 :(得分:1)
创建动画并将其添加到图层时,不会更改对象中的任何值。因此,在您的情况下,animationView的transform属性不会更改。因此,当动画结束时,视图将快照回到旧位置。要解决这个问题,你必须做两件事:
在添加动画之前,请将视图图层的transform属性设置为动画完成时所需的值。但是,这会向图层添加隐式动画,因此您需要终止隐式动画。要做到这一点:
添加动画方法中forKey:
的值必须是动画的名称,在本例中为&#34; transform&#34;。此名称将使用显式动画替换用于变换的隐式动画。
添加:
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*/