bwi*_*ton 28 iphone cocoa-touch core-animation core-graphics
我正在写一个iPhone应用程序,我有一个想要向外旋转的图像.
目前我的代码看起来像这样(包含在beginAnimations/commitAnimations块中):
scale = CGAffineTransformScale(CGAffineTransformIdentity, 5.0f, 5.0f);
swirl = CGAffineTransformRotate(scale, M_PI);
[player setTransform:swirl];
[player setAlpha:0.0f];
Run Code Online (Sandbox Code Playgroud)
但我发现,如果我尝试将旋转角度更改为4*M_PI,它根本不会旋转.是否可以使用CGAffineTransformRotate进行720˚旋转,还是必须切换到其他技术?
如果我必须切换到另一种技术,你会建议使用另一个线程(或计时器)来自己动画,还是OpenGL会更好?
谢谢,
布莱克.
mah*_*udz 65
您可以按一定数量的弧度旋转视图,无论它是小于完整旋转还是完整旋转的多倍,而不必将旋转分割成碎片.作为示例,以下代码将每秒一次旋转视图达指定的秒数.您可以轻松地修改它以通过一定数量的旋转或一定数量的弧度来旋转视图.
- (void) runSpinAnimationWithDuration:(CGFloat) duration;
{
CABasicAnimation* rotationAnimation;
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2.0 /* full rotation*/ * rotations * duration ];
rotationAnimation.duration = duration;
rotationAnimation.cumulative = YES;
rotationAnimation.repeatCount = 1.0;
rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
[myView.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
}
Run Code Online (Sandbox Code Playgroud)
标题回答:是的,CGAffineTransform可以旋转360度以上.
回答问题:是的,但你不能动画它,因为没有任何动画.
请记住,仿射变换是一个矩阵,旋转矩阵包含预先计算的正弦和余弦数.就像你说的那样:
CGFloat angle = 4.0 * M_PI;
NSAffineTransformStruct matrix = {
.m11 = cos(angle),
.m12 = sin(angle),
.m21 = -sin(angle),
.m22 = cos(angle),
.tx = 0.0,
.ty = 0.0
};
NSAffineTransform *transform = [NSAffineTransform transform];
[transform setTransformStruct:matrix];
Run Code Online (Sandbox Code Playgroud)
现在,让我们回顾一下cos和的一些示例值sin:
cos(0?) = 1sin(0?) = 0cos(2?) = 1sin(2?) = 0cos(4?) = 1sin(4?) = 0请记住,矩阵不包含角度 - 它只包含余弦和正弦.并且这些值不会从一个圆的倍数变为另一个.因此,没有什么可以动画的.
(请注意,Calculator.app为cos(xπ)和sin(xπ)提供了错误的结果.尝试使用Grapher,calc或Google.)
您需要将动画拆分为圆形的分数.半圈布拉德拉森建议会做得很好.
| 归档时间: |
|
| 查看次数: |
25077 次 |
| 最近记录: |