首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CABasicAnimation -视图应该位于最后一个帧上。

CABasicAnimation -视图应该位于最后一个帧上。
EN

Stack Overflow用户
提问于 2015-08-04 20:30:01
回答 2查看 148关注 0票数 0

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

CABasicAnimation *旋转= CABasicAnimation动画带:@“transform.rotation”;

代码语言:javascript
复制
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>

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-05 06:32:35

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

  1. 在添加动画之前,将视图层的transform属性设置为动画完成后所需的值。但是,这将向该层添加一个隐式动画,因此您需要删除隐式动画。要做到这一点:
  2. 添加动画方法中的forKey:值必须是动画的名称,在本例中为"transform“。此名称将用显式动画替换用于转换的隐式动画。

因此,请添加:

animationView.layer.transform =CA3DTransformMakeRotate(…);

并将添加动画调用更改为

animationView.layer加法动画:旋转forKey:@"transform";

这是解释在WWDC 2010,核心动画在实践第1部分,约39:20。

票数 1
EN

Stack Overflow用户

发布于 2015-08-05 05:40:51

在激发动画之前,进行如下事务:

代码语言:javascript
复制
[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*/
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31818728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档