您的位置:首页 > 其它

伪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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: