伪3D效果的实现
2016-06-17 13:32
260 查看
3D翻转
因为有3D翻转动画效果的UIView比较多,而且有
UILabel也有
UIImageView,所以我们可以提炼成一个方法,将目标
UIView和数据源作为参数:
func cubeAnimate(targetView: UIView, flightInfo: String) { // 判断UIView的具体实现类 if targetView.isKindOfClass(UILabel) { let virtualTargetView = targetView as! UILabel // 复制UIView,作为底面 let viewCopy = UILabel(frame: virtualTargetView.frame) viewCopy.alpha = 0 viewCopy.text = flightInfo viewCopy.font = virtualTargetView.font viewCopy.textAlignment = virtualTargetView.textAlignment viewCopy.textColor = virtualTargetView.textColor viewCopy.backgroundColor = UIColor.clearColor() // 设置底面UIView的初始位置和高度 viewCopy.transform = CGAffineTransformConcat(CGAffineTransformMakeScale(1.0, 0.1), CGAffineTransformMakeTranslation(1.0, viewCopy.frame.height / 2)) self.topView.addSubview(viewCopy) UIView.animateWithDuration(2, animations: { // 执行UIView和UIViewCopy的动画 virtualTargetView.transform = CGAffineTransformConcat(CGAffineTransformMakeScale(1.0, 0.1), CGAffineTransformMakeTranslation(1.0, -virtualTargetView.frame.height / 2)) virtualTargetView.alpha = 0 viewCopy.alpha = 1 viewCopy.transform = CGAffineTransformIdentity }, completion: { _ in // 当动画执行完毕后,将UIViewCopy的信息赋值给UIView,并还原UIView的状态,即与UIViewCopy相同的状态,然后移除UIViewCopy virtualTargetView.alpha = 1 virtualTargetView.text = viewCopy.text virtualTargetView.transform = CGAffineTransformIdentity viewCopy.removeFromSuperview() }) } else if targetView.isKindOfClass(UIImageView) { let virtualTargetView = targetView as! UIImageView let viewCopy = UIImageView(frame: virtualTargetView.frame) viewCopy.alpha = 0 viewCopy.image = UIImage(named: flightInfo) viewCopy.transform = CGAffineTransformConcat(CGAffineTransformMakeScale(1.0, 0.1), CGAffineTransformMakeTranslation(1.0, viewCopy.frame.height / 2)) self.topView.addSubview(viewCopy) UIView.animateWithDuration(2, animations: { virtualTargetView.transform = CGAffineTransformConcat(CGAffineTransformMakeScale(1.0, 0.1), CGAffineTransformMakeTranslation(1.0, -virtualTargetView.frame.height / 2)) virtualTargetView.alpha = 0 viewCopy.alpha = 1 viewCopy.transform = CGAffineTransformIdentity }, completion: { _ in virtualTargetView.alpha = 1 virtualTargetView.image = viewCopy.image virtualTargetView.transform = CGAffineTransformIdentity viewCopy.removeFromSuperview() }) } } |
判断
UIView的具体实现类,判断是
UILabel还是
UIImageView。
复制一份
UIView,作为底面。
设置
UIViewCopy的初始位置和高度。
执行UIView
和UIViewCopy`的动画。
当动画执行完毕后,将
UIViewCopy的信息赋值给
UIView,并还原
UIView的状态,即与
UIViewCopy相同的状态,然后移除
UIViewCopy。
相关文章推荐
- KVM 基本命令
- 注意提高情商
- 【增强学习】Torch中的增强学习层
- Android Studio修改包名
- sftp 下载 批量下载,单个下载,工具类
- WTL 设置主窗口最小/最大尺寸
- C语言模拟中国福利彩票【双色球】
- Anti-If: The missing patterns--转
- Android中Selsetor基本使用一,按下时改变按钮背景
- iptraf
- 分布式 OLTP 数据库
- hdu-5586 Sum(dp)
- 360全景漫游(unity3d + 暴风魔镜)
- selenium常用命令之页面元素定位
- linux下ftp服务器搭建
- 《java编程思想》--对象初始化和面向对象特性
- 11个物联网软件平台功能总结对比
- poj1724ROADS
- 自定义基类BaseActivity,节省开发步骤
- 3D效果的ViewPager