- 让UIView旋转一个角度
// CGAffineTransformMakeRotation(CGFloat angle) 传入一个弧度
**view.transform = CGAffineTransformMakeRotation((angle2Rad(angle))); // 是自己定义的一个宏 #define angle2Rad(angle) ((angle) / 180.0 * M_PI)
- 让UIView 不停的旋转
//创建一个定时器, 并添加到RunLoop中
CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(rotateViewForever)];
[link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
link.paused = true; // = true 是暂停; = false 是开始
- (void)rotateViewForever{
// CGAffineTransformRotate(CGAffineTransform t, CGFloat angle)
**view.transform = CGAffineTransformRotate(**view.transform, M_PI / 300.0); // 这个旋转是在上次view的transform(即旋转)的基础上进行的, 一直会连续进行
}
- 通过一个**View的transform可以知道它旋转了多少度, 进而做其他View的旋转
CGAffineTransform transform = **view.transform;
CGFloat angle2 = atan2(transform.b, transform.a);
- 核心动画(其中控件不可点击)
CABasicAnimation *animation = [CABasicAnimation animation];
animation.keyPath = @"transform.rotation";
animation.toValue =@(M_PI * 3); // 旋转多少角度
animation.duration = 3; // 持续多长时间
animation.repeatCount = 1; // 重复次数
animation.delegate = self;
[self.view.layer addAnimation:animation forKey:nil];
// 动画即将结束 遵守 CAAnimationDelegate 协议
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{
}
1. link.paused = true; // = true 是暂停; = false 是开始 ->常常用来做 开始 和 暂停操作
2.atan2(double, double)可以求出旋转的角度