最近项目中需要实现一个类似于硬币翻转的双面View,由于太懒了就在github上找了一个。CMSCoinView
之后再具体使用的时候发现很是不便,由于原作者是使用frame进行布局的,我的界面又有许多这样的view,导致代码很不优雅,于是就自己用swift写了一个。
代码实现很简单,思路也很简单,直接看效果图吧。
实现思路很简单,在代码里都有简单的注释。
下面几个关键点说一下:
// 此处可以将primaryView和secondaryView改写为需要的view子类,比如UILabel
var primaryView = UIImageView()
var secondaryView = UIImageView()
// 将secondaryView send到back, 设置为hidden
self.sendSubviewToBack(secondaryView)
secondaryView.hidden = true
// 使用UIView的 transitionFromView(fromView: UIView, toView: UIView, duration: NSTimeInterval, options: UIViewAnimationOptions, completion: ((Bool) -> Void)?)
// 来设置动画效果,这里需要注意的是options这里,需要设置为ShowHideTransitionViews,这主要是因为这个方法会操作视图层级,并添加新的目的地视图,如果使用AutoLayout,动画结束后,视图就没有约束了,所以会显示错误。
UIView.transitionFromView(displayingPrimary ? primaryView : secondaryView,
toView: displayingPrimary ? secondaryView : primaryView,
duration: spinTimeInterval,
options: [.TransitionFlipFromLeft, .ShowHideTransitionViews]) { (finish) in
if finish {
self.displayingPrimary = !self.displayingPrimary
if self.displayingPrimary {
self.secondaryView.hidden = true
} else {
self.secondaryView.hidden = false
}
}
}
具体使用的时候也很简单,
let flipView = FlipView()
self.view.addSubview(flipView)
flipView.frame = CGRect(x: 125, y: 100, width: 100, height: 100)
flipView.primaryView.image = UIImage(named: "surfingCamp")
flipView.secondaryView.image = UIImage(named: "pokemon2")
startFlip()
如果使用的时候,可以根据自己项目的需求,修改下FlipView的正反面View,比如可以设置圆角之类的。
Demo上传到GitHub上了。----> FlipView