最近項目中需要實現(xiàn)一個類似于硬幣翻轉(zhuǎn)的雙面View,由于太懶了就在github上找了一個虑粥。CMSCoinView
之后再具體使用的時候發(fā)現(xiàn)很是不便,由于原作者是使用frame進行布局的充蓝,我的界面又有許多這樣的view,導(dǎo)致代碼很不優(yōu)雅,于是就自己用swift寫了一個谓苟。
代碼實現(xiàn)很簡單官脓,思路也很簡單,直接看效果圖吧娜谊。
實現(xiàn)思路很簡單确买,在代碼里都有簡單的注釋。
下面幾個關(guān)鍵點說一下:
// 此處可以將primaryView和secondaryView改寫為需要的view子類纱皆,比如UILabel
var primaryView = UIImageView()
var secondaryView = UIImageView()
// 將secondaryView send到back湾趾, 設(shè)置為hidden
self.sendSubviewToBack(secondaryView)
secondaryView.hidden = true
// 使用UIView的 transitionFromView(fromView: UIView, toView: UIView, duration: NSTimeInterval, options: UIViewAnimationOptions, completion: ((Bool) -> Void)?)
// 來設(shè)置動畫效果,這里需要注意的是options這里派草,需要設(shè)置為ShowHideTransitionViews搀缠,這主要是因為這個方法會操作視圖層級,并添加新的目的地視圖近迁,如果使用AutoLayout艺普,動畫結(jié)束后,視圖就沒有約束了鉴竭,所以會顯示錯誤歧譬。
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()
如果使用的時候搏存,可以根據(jù)自己項目的需求瑰步,修改下FlipView的正反面View,比如可以設(shè)置圓角之類的璧眠。
Demo上傳到GitHub上了缩焦。----> FlipView