Bri*_*ian 1 cocoa core-animation quartz-graphics cgpath
我CGPathAddEllipseInRect用来绘制一个圆,然后在CAKeyframeAnimation中使用它.我的问题是动画总是在同一个地方开始.我认为我可以使用CGAffineTransform执行以下操作,使其从不同的点开始:
CGAffineTransform temp = CGAffineTransformMakeRotation(M_PI / 2);
CGPathAddEllipseInRect(animationPath , &temp, rect);
Run Code Online (Sandbox Code Playgroud)
我不知道这是做什么的.当它运行时,我甚至看不到动画的这一部分.它正在做一些屏幕外的事情.任何帮助理解这将是伟大的.
默认情况下,旋转发生在原点(0,0)周围,但是您想围绕圆心旋转,因此您必须进行其他转换:
float midX = CGRectGetMidX(rect);
float midY = CGRectGetMidY(rect);
CGAffineTransform t =
CGAffineTransformConcat(
CGAffineTransformConcat(
CGAffineTransformMakeTranslation(-midX, -midY),
CGAffineTransformMakeRotation(angle)),
CGAffineTransformMakeTranslation(midX, midY));
CGPathAddEllipseInRect(animationPath, &t, rect);
Run Code Online (Sandbox Code Playgroud)
从本质上讲,这会链接三个变换:首先,将圆移动到原点(0,0),然后应用旋转,然后将其移回原始位置.我做了一点可视化来说明效果:

我选择了一个正方形而不是圆形而是45°而不是90°以使旋转更容易看到,但原理是相同的.
| 归档时间: |
|
| 查看次数: |
896 次 |
| 最近记录: |