iOS开发之音乐播放器专辑图片旋转动画
来源:互联网 发布:dota2快速模式知乎 编辑:程序博客网 时间:2024/04/30 14:20
仿网易云音乐专辑图片的旋转动画
用过网易云音乐的人都知道,在网易云音乐的控制界面有一张旋转的,类似唱片一样的图片,这个效果其实是两张图片合成的,一张是黑色胶片,中间一张是专辑图片。这里不说怎么合成一张图片,只说说专辑图片的旋转动画。废话不多说,看代码:
objective-c版:
SCImageView.h
//// SCImageView.h// BaiduMusic//// Created by 凌 陈 on 8/22/17.// Copyright © 2017 凌 陈. All rights reserved.//#import <UIKit/UIKit.h>@interface SCImageView : UIImageView-(void) startRotating;-(void) stopRotating;-(void) resumeRotate;@end
SCImageView.m
//// SCImageView.m// BaiduMusic//// Created by 凌 陈 on 8/22/17.// Copyright © 2017 凌 陈. All rights reserved.//#import "SCImageView.h"@implementation SCImageView// 开始旋转-(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; // 重复次数,这里用最大次数 [self.layer addAnimation:rotateAnimation forKey:nil]; }// 停止旋转-(void) stopRotating { CFTimeInterval pausedTime = [self.layer convertTime:CACurrentMediaTime() fromLayer:nil]; self.layer.speed = 0.0; // 停止旋转 self.layer.timeOffset = pausedTime; // 保存时间,恢复旋转需要用到}// 恢复旋转-(void) resumeRotate { if (self.layer.timeOffset == 0) { [self startRotating]; return; } CFTimeInterval pausedTime = self.layer.timeOffset; self.layer.speed = 1.0; // 开始旋转 self.layer.timeOffset = 0.0; self.layer.beginTime = 0.0; CFTimeInterval timeSincePause = [self.layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime; // 恢复时间 self.layer.beginTime = timeSincePause; // 从暂停的时间点开始旋转}@end
swift版:
//// SCImageView.swift// SC Player//// Created by 凌 陈 on 7/9/17.// Copyright © 2017 凌 陈. All rights reserved.//import UIKitclass SCImageView: UIImageView { var ablumView: UIImageView? required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) self.ablumView = UIImageView(frame: CGRect(x: self.frame.size.width / 2 - 80, y: self.frame.size.height / 2 - 80, width: 160, height: 160)) self.ablumView?.clipsToBounds = true self.ablumView?.layer.cornerRadius = 80 self.addSubview(ablumView!) } func startRotating() { let rotateAnimation = CABasicAnimation(keyPath: "transform.rotation") rotateAnimation.fromValue = 0.0 rotateAnimation.toValue = Double.pi * 2 rotateAnimation.duration = 20.0 rotateAnimation.repeatCount = MAXFLOAT self.layer.add(rotateAnimation, forKey: nil) } func stopRotating() { let pausedTime = self.layer.convertTime(CACurrentMediaTime(), from: nil) self.layer.speed = 0.0 self.layer.timeOffset = pausedTime } func resumeRotate() { if self.layer.timeOffset == 0 { startRotating() return } let pausedTime = self.layer.timeOffset self.layer.speed = 1.0 self.layer.timeOffset = 0.0 self.layer.beginTime = 0.0 let timeWhenpause = self.layer.convertTime(CACurrentMediaTime(), from: nil) - pausedTime self.layer.beginTime = timeWhenpause }}swift版中有合成专辑图片,其实就是图中图,UIImageView中再定义一个UIImageView。
阅读全文
0 0
- iOS开发之音乐播放器专辑图片旋转动画
- 仿QQ音乐播放器播放音乐时专辑图片的圆形和旋转
- 音乐播放器之示波器和读取专辑图片
- iOS开发之旋转动画及GIF格式图片的播放
- Android开发本地及网络Mp3音乐播放器(五)实现专辑封面图片
- Android仿虾米音乐播放器之专辑图片模糊处理
- android 音乐播放器----获取专辑封面图片
- android 音乐播放器----获取专辑封面图片
- 定时器+反射变换 --->模拟一个音乐播放器的音乐专辑旋转
- ios开发---音乐播放器之怎么获取音乐列表
- iOS开发之网络音乐播放器(SC音乐)(一)
- iOS开发:音乐播放器
- 音乐播放器 - iOS开发
- IOS锁屏状态播放音乐时显示专辑信息和图片
- IOS的后台模式播放音乐,显示专辑和图片信息
- IOS锁屏状态播放音乐时显示专辑信息和图片
- IOS的后台模式播放音乐,显示专辑和图片信息
- 高仿QQ音乐之旋转专辑图片的实现—仿留声机效果
- webstorm激活方法 webstorm激活码 jetbrains激活
- NF文件
- 【Maven 3.5】从下载到使用Eclipse创建Web项目
- web.xml配置context-param详解
- #if #endif
- iOS开发之音乐播放器专辑图片旋转动画
- json、jsonp的定义和区别
- Github Pages 搭建网站
- 使用POI操作excel(读取和创建)快速开发指南
- android 基于 Retrotfit2.1+Material Design+ijkplayer 开发的一个 APP
- 分析Redis架构设计
- HashMap和Hashtable的区别
- 换硬币问题
- Spring 源码阅读 BeanFactory(二) 之registerBeanDefinition方法