相关疑难解决方法(0)

UIImageView上的iOS CAKeyframeAnimation rotationMode

我正在尝试沿着贝塞尔曲线路径移动的UIImageView对象位置的关键帧动画.该图显示了动画之前的初始状态.蓝线是路径 - 最初直线向上移动,浅绿色框是初始边界框或图像,深绿色"鬼"是我正在移动的图像:

初始状态

当我将rotationMode设置为启动动画时nil,图像将按预期在路径中保持相同的方向.

但是当我将rotationMode设置为启动动画时kCAAnimationRotateAuto,图像会立即逆时针旋转90度并保持此方向一直通过路径.当它到达路径的末尾时,它会以正确的方向重绘(实际上它显示了我在最终位置重新定位的UIImageView)

在此输入图像描述

我天真地期望rotationMode会将图像定向到路径的切线而不是正常,特别是当Apple文档用于CAKeyframeAnimation rotationMode状态时

确定沿路径设置动画的对象是否旋转以匹配路径切线.

那么这里的解决方案是什么?我是否必须将图像顺时针旋转90度?或者有什么我想念的东西?

谢谢你的帮助.


编辑3月2日

我使用仿射旋转在路径动画之前添加了一个旋转步骤,如:

theImage.transform = CGAffineTransformRotate(theImage.transform,90.0*M_PI/180);
Run Code Online (Sandbox Code Playgroud)

然后在路径动画之后,重置旋转:

theImage.transform = CGAffineTransformIdentity;
Run Code Online (Sandbox Code Playgroud)

这使得图像以预期的方式遵循路径.但是我现在遇到了图像闪烁的另一个问题.我已经在寻找这个SO问题中闪烁问题的解决方案:

iOS CAKeyFrameAnimation缩放在动画结束时闪烁

所以现在我不知道我是做了更好还是更坏!


编辑3月12日

虽然Caleb指出是的,但我必须预先旋转我的图像,Rob提供了一个很棒的代码包,几乎完全解决了我的问题.Rob没有做的唯一事情是补偿我的资产是用垂直方向而不是水平方向绘制的,因此在做动画之前还需要将它们预先旋转90度.但是,嘿,唯一公平的是我必须做一些工作才能让事情顺利进行.

所以我对Rob的解决方案的轻微修改是为了满足我的要求:

  1. 当我添加UIView时,我预先旋转它以通过设置rotationMode:来抵消添加的固有旋转:

    theImage.transform = CGAffineTransformMakeRotation(90*M_PI/180.0);

  2. 我需要在动画结束时保持旋转,所以不是在定义完成块之后用新的比例因子对视图的变换进行爆破,而是根据当前变换构建比例:

    theImage.transform = CGAffineTransformScale(theImage.transform,scaleFactor,scaleFactor);

而这就是我必须做的就是让我的形象像我预期的那样沿着这条路走!


编辑3月22日

我刚刚向GitHub上传了一个演示项目,该项目展示了沿着bezier路径移动对象的过程.代码可以在PathMove找到

我还在我的博客中写了一篇关于在iOS中沿着bezier路径移动对象的文章

rotation cakeyframeanimation ios

11
推荐指数
2
解决办法
5501
查看次数

标签 统计

cakeyframeanimation ×1

ios ×1

rotation ×1