IOS swift中的動(dòng)畫的實(shí)例詳解
IOS swift中的動(dòng)畫的實(shí)例詳解
UIView的通用動(dòng)畫
let view = UIView(frame: CGRectMake(10.0, 10.0, 100.0, 40.0)) self.view.addSubview(view) view.backgroundColor = UIColor.lightGrayColor() // 位置改變 var frame = view.frame UIView.animateWithDuration(0.6, delay: 2.0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { () -> Void in frame.origin.x = 200.0 view.frame = frame }) { (finished:Bool) -> Void in UIView.animateWithDuration(0.6) { () -> Void in frame.origin.x = 10.0 view.frame = frame } }
CABasicAnimation核心動(dòng)畫
1、CABasicAnimation類只有三個(gè)屬性:
fromValue:開始值 toValue:結(jié)束值 Duration:動(dòng)畫的時(shí)間 repeatCount:重復(fù)次數(shù)
2、通過animationWithKeyPath鍵值對(duì)的方式設(shè)置不同的動(dòng)畫效果
transform.scale transform.scale.x transform.scale.y transform.rotation.z opacity margin zPosition backgroundColor cornerRadius borderWidth bounds contents contentsRect cornerRadius frame hidden mask masksToBounds opacity position shadowColor shadowOffset shadowOpacity shadowRadius
let view = UILabel(frame: CGRectMake((self.view.frame.size.width - 200.0) / 2, 10.0, 200.0, 40.0)) self.view.addSubview(view) view.text = "縮放/淡入淡出" view.textAlignment = .Center view.adjustsFontSizeToFitWidth = true view.backgroundColor = UIColor.lightGrayColor() // let layer = view.layer // 開始動(dòng)畫 // 縮放 let scaleAnimate = CABasicAnimation(keyPath: "transform.scale") scaleAnimate.fromValue = 1.0 scaleAnimate.toValue = 1.5 scaleAnimate.autoreverses = true scaleAnimate.repeatCount = MAXFLOAT scaleAnimate.duration = 1.0 // 淡入淡出 let opaqueAnimate = CABasicAnimation(keyPath: "opacity") opaqueAnimate.fromValue = 0.1 opaqueAnimate.toValue = 1 opaqueAnimate.autoreverses = true opaqueAnimate.repeatCount = MAXFLOAT opaqueAnimate.duration = 1.0 layer.addAnimation(scaleAnimate, forKey: "scaleAnimate") layer.addAnimation(opaqueAnimate, forKey: "opacityAnimate")
// 組合動(dòng)畫 let view3 = UILabel(frame: CGRectMake(10.0, (currentView.frame.origin.y + currentView.frame.size.height + 10.0), 120.0, 40.0)) self.view.addSubview(view3) view3.text = "組合動(dòng)畫" view3.textAlignment = .Center view3.adjustsFontSizeToFitWidth = true view3.backgroundColor = UIColor.lightGrayColor() // let layer3 = view3.layer // CAAnimationGroup組合動(dòng)畫效果 let rotate: CABasicAnimation = CABasicAnimation() rotate.keyPath = "tranform.rotation" rotate.toValue = M_PI let scale: CABasicAnimation = CABasicAnimation() scale.keyPath = "transform.scale" scale.toValue = 0.0 let move: CABasicAnimation = CABasicAnimation() move.keyPath = "transform.translation" move.toValue = NSValue(CGPoint: CGPoint(x: 217, y: 230)) let animationGroup:CAAnimationGroup = CAAnimationGroup() animationGroup.animations = [rotate, scale, move] animationGroup.duration = 2.0 animationGroup.fillMode = kCAFillModeForwards animationGroup.removedOnCompletion = false animationGroup.repeatCount = MAXFLOAT // layer3.addAnimation(animationGroup, forKey: nil)
CAKeyframeAnimation關(guān)鍵幀動(dòng)畫
主要屬性:
keyPath : 要設(shè)置的屬性 path : 路徑 可用UIBezierPath(設(shè)置了path,將忽略values) duration : 動(dòng)畫時(shí)長(zhǎng) repeatCount : 重復(fù)次數(shù) calculationMode : 動(dòng)畫計(jì)算方式 values:每一個(gè)關(guān)鍵幀(設(shè)置了path,將忽略values) removedOnCompletion:執(zhí)行完之后不刪除動(dòng)畫 fillMode:執(zhí)行完之后保存最新的狀態(tài) delegate:代理
let view = UILabel(frame: CGRectMake((self.view.frame.size.width - 200.0) / 2, 10.0, 200.0, 40.0)) self.view.addSubview(view) view.text = "CAKeyframeAnimation動(dòng)畫" view.backgroundColor = UIColor.lightGrayColor() // let layer = view.layer // 位移 let keyAnimate = CAKeyframeAnimation(keyPath: "position") // 設(shè)定關(guān)鍵幀 let value0 = NSValue(CGPoint: layer.position) let value1 = NSValue(CGPoint: CGPointMake(layer.position.x, layer.position.y + 200)) let value2 = NSValue(CGPoint: CGPointMake(layer.position.x - 150, layer.position.y + 200)) let value3 = NSValue(CGPoint: CGPointMake(layer.position.x - 150, layer.position.y)) let value4 = NSValue(CGPoint: layer.position) // 速度曲線 let tf0 = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) let tf1 = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear) let tf2 = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn) let tf3 = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut) keyAnimate.timingFunctions = [tf0, tf1, tf2, tf3] // 每段執(zhí)行的時(shí)間 keyAnimate.keyTimes = [0.0, 0.5, 0.6, 0.7, 1] // keyAnimate.values = [value0, value1, value2, value3, value4] keyAnimate.autoreverses = false keyAnimate.repeatCount = 3 keyAnimate.duration = 6.0 // keyAnimate.delegate = self // layer.addAnimation(keyAnimate, forKey: "position")
// 代理方法 override func animationDidStart(anim: CAAnimation) { print("開始") } override func animationDidStop(anim: CAAnimation, finished flag: Bool) { print("結(jié)束") }
let view3 = UILabel(frame: CGRectMake(10.0, (currentView.frame.origin.y + currentView.frame.size.height + 10.0), 60.0, 60.0)) self.view.addSubview(view3) view3.text = "抖動(dòng)" view3.backgroundColor = UIColor.lightGrayColor() // let layer3 = view3.layer // 抖動(dòng) let animation3 = CAKeyframeAnimation() animation3.keyPath = "transform.rotation" // (-M_PI_4 /90.0 * 5)表示-5度 。 let value31 = NSValue(CGPoint: CGPointMake(CGFloat(-M_PI_4 / 90.0 * 5.0), 0.0)) let value32 = NSValue(CGPoint: CGPointMake(CGFloat(M_PI_4 / 90.0 * 5.0), 0.0)) let value33 = NSValue(CGPoint: CGPointMake(CGFloat(-M_PI_4 / 90.0 * 5.0), 0.0)) animation3.values = [value31, value32, value33]; animation3.removedOnCompletion = false animation3.fillMode = kCAFillModeForwards animation3.duration = 0.2 animation3.repeatCount = MAXFLOAT // layer3.addAnimation(animation3, forKey: nil)
如有疑問請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
Swift 進(jìn)階 —— map 和 flatMap的使用
這篇文章主要介紹了Swift map和flatMap的相關(guān)資料,幫助大家更好的理解和使用Swift,感興趣的朋友可以了解下2020-09-09Objective-C中編程中一些推薦的書寫規(guī)范小結(jié)
這篇文章主要介紹了Objective-C的一些編程書寫規(guī)范小結(jié),包括類與方法等面向?qū)ο缶幊滔嚓P(guān)的代碼編寫風(fēng)格,需要的朋友可以參考下2016-04-04UITableViewCell在編輯狀態(tài)下背景顏色的修改方法
這篇文章主要給大家介紹了關(guān)于UITableViewCell在編輯狀態(tài)下背景顏色的修改方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。2017-07-07iOS擼一個(gè)簡(jiǎn)單路由Router的實(shí)現(xiàn)代碼
這篇文章主要介紹了iOS擼一個(gè)簡(jiǎn)單路由Router的實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-09-09iOS11.3以下modal中input光標(biāo)錯(cuò)位的解決方法
這篇文章主要介紹了iOS11.3以下modal中input光標(biāo)錯(cuò)位的解決方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12iOS實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能
這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01