亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

iOS動畫——LayerAnimations

2019-11-14 19:03:24
字體:
來源:轉載
供稿:網友

我們先來看一下今天我們要實現的效果,今天實現的效果用第一篇View Animations能實現相同效果。

動畫由書籍《iOS Animations by tutorials》提供,我只是一個復述者

哦~先來看一下Layer是什么吧:

比較通俗的來說,CALayer就是UIView的視圖層,你所看到的UIView,其實是UIView的layer。這么說吧,CALayer就是樹葉的葉綠素,和葉綠素不同的就是,CALayer更加的“單純”,我們知道葉綠素是包括很多基質的,而CALayer僅僅是代表了你能看到的一切。


我們今天把所有的重點都放在動畫的編寫上,默認有swift基礎 如果你觀察都仔細的話,你會發現,背景上的云是漸入的,也就是透明度由0到1,當然這個用我們前面學的UIViewAnimation是很容易實現的,那么用CALayer如何實現呢,看下面的代碼:

    //1    let fadeIn = CABasicAnimation(keyPath: "opacity")    //2    fadeIn.fromValue = 0.0    //3    fadeIn.toValue = 1.0    //4    fadeIn.duration = 0.5    //5    fadeIn.fillMode = kCAFillModeBackwards    //6    fadeIn.beginTime = CACurrentMediaTime() + 0.5    cloud1.layer.addAnimation(fadeIn, forKey: nil)    fadeIn.beginTime = CACurrentMediaTime() + 0.7    cloud2.layer.addAnimation(fadeIn, forKey: nil)    fadeIn.beginTime = CACurrentMediaTime() + 0.9    cloud3.layer.addAnimation(fadeIn, forKey: nil)    fadeIn.beginTime = CACurrentMediaTime() + 1.1    cloud4.layer.addAnimation(fadeIn, forKey: nil)

很明顯我們是給四朵云的layer添加了動畫,然后實現了漸入的效果。

  • 1、這句話聲明了一個 CABasicAnimation,注意到里面填寫的參數沒,填的是 opacity,就是透明度的意思,這里頭還能填寫很多其他值,比如position,當然這些我們后面都會講的。
  • 2、我們對動畫的初始值進行設定,也就是透明度最開始為0.
  • 3、我們對動畫的最終值進行設定,也就是透明度為1。
  • 4、動畫持續時間,我們設定為0.5秒。和前面三句合起來,就表達了這么一個意思:這個動畫是對對象的透明度進行改變,在0.5秒內,透明度從0變化為1.
  • 5、我們給fillMode屬性填的值是kCAFillModeBackwards,那么kCAFillModeBackwards這個值有什么用呢,這個屬性可以顯示對象的frame,我們可以把這一句注釋以后運行程序來看一下效果,我們會發現,在進行動畫之前,云朵任然可見,而這顯然是一個BUG,如何解決這個BUG呢,其實方法很多,比如我們可以講云朵的透明度都設置為0,然后計算好動畫時間,當動畫結束以后將云朵的透明度設置為1,這樣做當然可以實現相同的效果,但是這樣做實在是~~~~太不優雅了,還有一種做法就是添加fillMode屬性,kCAFillModeBackwards的意思是顯示動畫的初始狀態,同時還有其他兩個值kCAFillModeForwards可以顯示對象動畫之后的效果,kCAFillModeBoth則是兼顧以上兩個效果。
  • 6、這個屬性很好解釋,每一朵云朵的動畫并不是同時進行的,那么我們就給云朵設定開始的時間,這個屬性和我們前面說過的UIViewAnimation的delay這個參數比較類似。

以上內容實現了云朵的漸入動畫。

如果對我已經說過好幾遍的UIViewAniamtion有疑問的話,請自行閱讀本人前面的文章,覺得不錯的話請關注本人,再點一個喜歡吧,親~~


接下來實現的是標題、Username、PassWord有screen外由左向右移動到屏幕中心的動畫,直接上代碼:

   //1    let flyRight = CABasicAnimation(keyPath: "position.x")    flyRight.toValue = view.bounds.size.width/2    flyRight.fromValue = -view.bounds.size.width/2    flyRight.duration = 0.5    heading.layer.addAnimation(flyRight, forKey: nil)    //2    flyRight.beginTime = CACurrentMediaTime() + 0.3    flyRight.fillMode = kCAFillModeBackwards    username.layer.addAnimation(flyRight, forKey: nil)   flyRight.beginTime = CACurrentMediaTime() + 0.4   password.layer.addAnimation(flyRight, forKey: nil)
  • //1 通過對云朵動畫的講解,相信其實我們已經能夠大致看懂這一段代碼了,和上面唯一不同的就是,我們這里創建的CABasicAnimation的動畫對象為"position.x",fromvaluetoVaule相信也不用進行太多講解,值得一題的是我們的值指的是對象的center.x,而不是左上角。
  • //2 對username延遲0.3秒進行。同時同樣設定 flyRight.fillMode = kCAFillModeBackwards

是不是很簡單呢,是的~


Log in 按鈕的動畫,上代碼:

UIView.animateWithDuration(0.5, delay: 0.5, usingSPRingWithDamping: 0.5, initialSpringVelocity: 0.0, options: nil, animations: {        self.loginButton.center.y -= 30.0        self.loginButton.alpha = 1.0    }, completion: nil)

對于這一段代碼的解釋在這里,說的十分詳細,作者也長得很帥,看頭像就看得出來:http://www.jianshu.com/p/bd7bf438b288喜歡的話請關注他。


我們還發現云朵是不斷的移動的,繼續上代碼:

 func animateCloud(cloud: UIImageView) {    let cloudSpeed = 60.0 / view.frame.size.width    let duration = (view.frame.size.width - cloud.frame.origin.x) * cloudSpeed    UIView.animateWithDuration(NSTimeInterval(duration), delay: 0.0, options: .CurveLinear, animations: {      cloud.frame.origin.x = self.view.frame.size.width    }, completion: {_ in      cloud.frame.origin.x = -cloud.frame.size.width      self.animateCloud(cloud)    })  }

> 解釋請參考Log in按鈕的解釋。-------------先就只剩下點擊**Log in**按鈕以后的動畫了,我們先來看一下發生什么了,當我們點擊按鈕以后,按鈕duang~的一下蹦到下面了,同時顏色變了,圓角變大了,然后添加了一個活動指示器。 上代碼:

@IBAction func login() {    //1    UIView.animateWithDuration(1.5, delay: 0.0, usingSpringWithDamping: 0.2, initialSpringVelocity: 0.0, options: nil, animations: {      self.loginButton.bounds.size.width += 80.0    }, completion: nil)    //2    UIView.animateWithDuration(0.33, delay: 0.0, usingSpringWithDamping: 0.7, initialSpringVelocity: 0.0, options: nil, animations: {      self.loginButton.center.y += 60.0    //3      self.spinner.center = CGPoint(x: 40.0, y: self.loginButton.frame.size.height/2)      self.spinner.alpha = 1.0    }, completion: {_ in    //4      self.showMessage(index: 0)    })    //5    let tintColor = UIColor(red: 0.85, green: 0.83, blue: 0.45, alpha: 1.0)    tintBackgroundColor(layer: loginButton.layer, toColor: tintColor)    //6    roundCorners(layer: loginButton.layer, toRadius: 25.0)  }

這一段就厲害了,因為這一段特別的長。

  • 1、duang~的一下按鈕變長了。
  • 2、duang~的一下按鈕下移了。
  • 3、添加活動指示器。
  • 4、添加message這個后面再說。
  • 5、調用tintBackgroundColor方法,改變顏色,這是tintBackgroundColor方法的代碼:
    func tintBackgroundColor(#layer: CALayer, #toColor: UIColor) { let tint = CABasicAnimation(keyPath: "backgroundColor") tint.fromValue = layer.backgroundColor layer.backgroundColor = toColor.CGColor tint.toValue = toColor.CGColor tint.duration = 1.0 tint.fillMode = kCAFillModeBoth layer.addAnimation(tint, forKey: nil) }
    其實這個方法和前面的CABasicgroundColor大體是相同的,我們先把顏色改變成我們需要變成的顏色,然后執行動畫。
  • 6、增大圓角的動畫
    func roundCorners(#layer: CALayer, #toRadius: CGFloat) { let round = CABasicAnimation(keyPath: "cornerRadius") round.fromValue = layer.cornerRadius layer.cornerRadius = toRadius round.toValue = toRadius round.duration = 0.33 layer.addAnimation(round, forKey: nil) }
    這個實現的方法大體是上面改變顏色的思想是一模一樣的。也是先改變圓角,然后執行動畫,最后顯示的會是你一開始設定的圓角。

現在整個動畫就只剩下了那個message的動畫,和message的動畫結束以后,Log in按鈕彈回的動畫,而Log in按鈕彈回的動畫和前面剛說過的按鈕彈下是一模一樣的,只是相反而已。我們來看一下message的動畫:

func removeMessage(#index: Int) {    UIView.animateWithDuration(0.33, delay: 0.0, options: nil, animations: {      self.status.center.x += self.view.frame.size.width    }, completion: {_ in      self.status.hidden = true      self.status.center = self.statusPosition      self.showMessage(index: index+1)    })  }  func resetForm() {    UIView.transitionWithView(status, duration: 0.2, options: .TransitionFlipFromTop, animations: {      self.status.hidden = true      self.status.center = self.statusPosition    }, completion: nil)    UIView.animateWithDuration(0.2, delay: 0.0, options: nil, animations: {      self.spinner.center = CGPoint(x: -20.0, y: 16.0)      self.spinner.alpha = 0.0      self.loginButton.bounds.size.width -= 80.0      self.loginButton.center.y -= 60.0    }, completion: {_ in      let tintColor = UIColor(red: 0.63, green: 0.84, blue: 0.35, alpha: 1.0)      tintBackgroundColor(layer: self.loginButton.layer, toColor: tintColor)      roundCorners(layer: self.loginButton.layer, toRadius: 10.0)    })  }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品国产91乱高清在线观看| 久久久久久久久久国产| 欧美最近摘花xxxx摘花| 6080yy精品一区二区三区| 91免费看国产| 91成人福利在线| 欧美日韩综合视频| 亚洲字幕在线观看| 久久久精品2019中文字幕神马| 91超碰中文字幕久久精品| 免费91麻豆精品国产自产在线观看| 69视频在线播放| 欧美精品午夜视频| 国产日韩欧美成人| 欧美小视频在线| 精品国产一区二区三区久久久狼| 国产91精品青草社区| 成人啪啪免费看| 最近2019中文字幕一页二页| 91在线观看免费| 亚洲自拍偷拍一区| 国产一区二区三区四区福利| 成人激情视频小说免费下载| 国产成人小视频在线观看| 黑人巨大精品欧美一区二区三区| 欧美性一区二区三区| 亚洲精品永久免费精品| 欧美黄色片免费观看| 欧美xxxx14xxxxx性爽| 亚洲国产精品一区二区久| 国产精品高潮呻吟久久av黑人| 欧美大人香蕉在线| 日韩hd视频在线观看| 欧美成人午夜激情视频| 日韩av网址在线观看| 日韩欧美一区二区三区久久| 国产精品白嫩初高中害羞小美女| 亚洲男人天堂网| 日韩视频在线观看免费| 国产成人综合久久| 欧美日韩免费在线| 日韩视频在线一区| 日韩在线播放视频| 久久99久久99精品中文字幕| 国产精品18久久久久久首页狼| 亚洲二区在线播放视频| 久久精品国产96久久久香蕉| 国产一区深夜福利| 日韩亚洲欧美中文高清在线| 97在线免费观看视频| 国产欧洲精品视频| 亚洲天天在线日亚洲洲精| 国产精品91久久久| 国产精品视频网址| 久久成年人免费电影| 国产精品jizz在线观看麻豆| 亚洲精品一区久久久久久| 91热福利电影| 亚洲精品美女在线观看播放| 欧美日韩亚洲系列| 欧美亚洲另类制服自拍| 日韩欧美中文字幕在线播放| 人人爽久久涩噜噜噜网站| 成年人精品视频| 亚洲一区二区三区sesese| 久久久久久久国产精品视频| 97精品视频在线| 日本精品视频在线播放| 日韩av在线免费播放| 国产精品国模在线| 日韩一区二区三区xxxx| 日韩精品久久久久久久玫瑰园| 久久亚洲精品中文字幕冲田杏梨| 2019精品视频| 欧美性极品少妇精品网站| 深夜福利日韩在线看| 亚洲国产精品va在线看黑人动漫| 成人精品视频久久久久| 国产精品一区久久| 国产一区二区日韩| 色综合天天狠天天透天天伊人| 国产精品嫩草影院一区二区| 国产精品专区h在线观看| 久久精品99无色码中文字幕| 韩曰欧美视频免费观看| 青青久久aⅴ北条麻妃| 中国人与牲禽动交精品| 国产欧美日韩免费| 午夜精品久久久久久久99热| 国产98色在线| 久久免费成人精品视频| 国产精品偷伦免费视频观看的| 成人在线观看视频网站| 日韩成人在线免费观看| 欧美亚洲日本黄色| 日韩精品视频三区| 欧美日韩国产一区在线| 超碰精品一区二区三区乱码| 欧美中文字幕视频在线观看| 亚洲一区二区三区在线免费观看| 国产一区二区av| 国产亚洲美女精品久久久| 国产亚洲日本欧美韩国| 日韩欧美中文免费| 不卡av在线播放| 午夜免费在线观看精品视频| 性欧美长视频免费观看不卡| 欧美视频在线免费看| 777国产偷窥盗摄精品视频| 精品国产老师黑色丝袜高跟鞋| 欧美另类暴力丝袜| 国产成人鲁鲁免费视频a| 欧美国产欧美亚洲国产日韩mv天天看完整| 日韩电影中文字幕| 亚洲黄色在线看| 亚洲91精品在线观看| 亚洲欧美在线播放| 亚洲激情视频网| 欧美性猛交xxxxx水多| 亚洲影视中文字幕| 亚洲午夜未满十八勿入免费观看全集| 亚洲国产精品久久久| 亚洲精品456在线播放狼人| 欧美专区第一页| 国产一区二区三区视频免费| 日韩欧美在线视频日韩欧美在线视频| 亚洲free性xxxx护士hd| 91九色蝌蚪国产| 亚洲一区二区三区xxx视频| 久久久免费av| 欧美成人在线免费| 国产成人在线播放| 欧美日韩中文字幕日韩欧美| 欧美成年人视频| 欧美黄网免费在线观看| 性欧美办公室18xxxxhd| 九九久久国产精品| 久久精品国产久精国产一老狼| 亚洲国产91精品在线观看| 欧日韩在线观看| 中文字幕日韩精品有码视频| 欧美最猛性xxxxx亚洲精品| 亚洲美女喷白浆| 久久99精品国产99久久6尤物| 久久久久久久久久久免费精品| 欧美日韩国产91| 亚洲国产精品va在线看黑人| 国产成人高清激情视频在线观看| 欧洲成人免费视频| 青草青草久热精品视频在线网站| 97视频在线观看免费高清完整版在线观看| 亚洲娇小xxxx欧美娇小| 57pao成人永久免费视频| 精品国产老师黑色丝袜高跟鞋| 日韩av快播网址| 亚洲女性裸体视频| 欧美性生交xxxxxdddd| 日韩精品在线播放| 日韩在线视频观看| 久久综合久中文字幕青草| 欧美性猛交xxxx偷拍洗澡| 成人亚洲综合色就1024| 欧美精品福利视频| 日韩综合中文字幕|