原文地址:https://blog.csdn.net/u014636932/article/details/77479210
仿网易云音乐专辑图片的旋转动画
用过网易云音乐的人都知道,在网易云音乐的控制界面有一张旋转的,类似唱片一样的图片,这个效果其实是两张图片合成的,一张是黑色胶片,中间一张是专辑图片。这里不说怎么合成一张图片,只说说专辑图片的旋转动画。废话不多说,看代码:
objective-c版:
// 开始旋转
- (void)startRotating {
CABasicAnimation* rotateAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
rotateAnimation.fromValue = [NSNumber numberWithFloat:0.0];
rotateAnimation.toValue = [NSNumber numberWithFloat:M_PI * 2]; // 旋转一周
rotateAnimation.duration = 20.0; // 旋转时间20秒
rotateAnimation.repeatCount = MAXFLOAT; // 重复次数,这里用最大次数
[_mainCDIV.layer addAnimation:rotateAnimation forKey:nil];
}
// 停止旋转
- (void)stopRotating {
CFTimeInterval pausedTime = [_mainCDIV.layer convertTime:CACurrentMediaTime() fromLayer:nil];
_mainCDIV.layer.speed = 0.0; // 停止旋转
_mainCDIV.layer.timeOffset = pausedTime; // 保存时间,恢复旋转需要用到
}
// 恢复旋转
- (void)resumeRotate {
if (_mainCDIV.layer.timeOffset == 0) {
[self startRotating];
return;
}
CFTimeInterval pausedTime = _mainCDIV.layer.timeOffset;
_mainCDIV.layer.speed = 1.0; // 开始旋转
_mainCDIV.layer.timeOffset = 0.0;
_mainCDIV.layer.beginTime = 0.0;
CFTimeInterval timeSincePause = [_mainCDIV.layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime; // 恢复时间
_mainCDIV.layer.beginTime = timeSincePause; // 从暂停的时间点开始旋转
}
网友评论