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

首頁 > 系統 > iOS > 正文

iOS 水波紋動畫的實現效果

2020-07-26 02:57:21
字體:
來源:轉載
供稿:網友

本人最近在研究iOS動畫,至于原理,我不在這里說了。畢竟這里的標題:水波紋的實現。

在這里,要學習水波紋的實現,首先要知道以下幾點知識:

1.正弦函數:y = Asin(wx +b) + c。相信大家都比較熟悉。

2.CAShapeLayer的簡單實用,相信看一下,就是知道其大概的用途了,形狀Layer層。和用戶顯示圖形的Layer,繼承于layer,好了,廢話不多說,直接上圖吧。

上面的知識點,我會以代碼的方式,梳理上面的知識點,不過首先我還是上傳效果圖吧,有圖有真相,才是事實嘛。

1.效果圖:

下面開始上代碼。

2.創建變量

//這里的lazy:是懶加載 就是OC中重寫get,set方法 lazy var waveDisplaylink = CADisplayLink()//相比NSTimer下,這里用CADisplayLink主要是精確點,其頻率:1/60 lazy var firstWaveLayer = CAShapeLayer() lazy var secondWaveLayer = CAShapeLayer() /// 基礎描述 正弦函數 ///  y=Asin(ωx+φ)+ b ///  A : wavaA ///  w : 1/waveW ///  φ : offsetφ ///  b : b private var waveA: CGFloat = 0 private var waveW: CGFloat = 0 private var offsetX: CGFloat = 0 private var b : CGFloat = 0 //水紋的移動的速度 var waveSpeed : CGFloat = 0 

上面的變量的,都有相關的注釋,我就不再做解釋了。

3.數據的初始化

//MARK: - 數據的初始化 private func initData(){   waveSpeed = 0.05   waveA = 8   // 設置周期 :( 2* M_PI)/waveW = bounds.size.width 。因為涉及的是layer,所以只談bounds,不說frame   waveW = 2 * CGFloat(M_PI) / bounds.size.width   b = bounds.size.height / 2 } 

4.UI的初始化

private func configUI(){    firstWaveLayer.fillColor = UIColor.init(colorLiteralRed: 69/255.0, green: 255/255.0, blue: 255/255.0, alpha: 0.5).cgColor    secondWaveLayer.fillColor = UIColor.init(colorLiteralRed: 69/255.0, green: 255/255.0, blue: 255/255.0, alpha: 0.5).cgColor    layer.addSublayer(firstWaveLayer)    layer.addSublayer(secondWaveLayer)    waveDisplaylink = CADisplayLink(target: self, selector: #selector(getCurrentWave))    waveDisplaylink.add(to: RunLoop.current, forMode: .commonModes)  } 

這里創建兩個shapeLayer,因為這樣的話,可以才像水的波紋不是?,這里還有個要說的是CADisplayLink,主要是他比NSTimer更精準,屏幕刷新頻率(FPS)是60,,iOS設備的刷新頻率是固定的,正常情況下回再每次刷新結束后都調用,也就是60次/s.所以選擇CADisplayLink。

5.下面的關鍵部分,代碼如下:

@objc private func getCurrentWave() {   offsetX += waveSpeed   setCurrentStatusWavePath() } //MARK: - 關鍵部分 private func setCurrentStatusWavePath() {   // 創建一個路徑   let firstPath = CGMutablePath()   var firstY = bounds.size.width/2   firstPath.move(to: CGPoint(x: 0, y: firstY))   for i in 0...Int(bounds.size.width) {     firstY = waveA * sin(waveW * CGFloat(i) + offsetX) + b     firstPath.addLine(to: CGPoint(x: CGFloat(i), y: firstY))   }      firstPath.addLine(to: CGPoint(x: bounds.size.width, y: bounds.size.height))   firstPath.addLine(to: CGPoint(x: 0, y: bounds.size.height))   firstPath.closeSubpath()   firstWaveLayer.path = firstPath      // 創建一個路徑   let secondPath = CGMutablePath()   var secondY = bounds.size.width/2   secondPath.move(to: CGPoint(x: 0, y: secondY))      for i in 0...Int(bounds.size.width) {     secondY = waveA * sin(waveW * CGFloat(i) + offsetX - bounds.size.width/2 ) + b     secondPath.addLine(to: CGPoint(x: CGFloat(i), y: secondY))   }   secondPath.addLine(to: CGPoint(x: bounds.size.width, y: bounds.size.height))   secondPath.addLine(to: CGPoint(x: 0, y: bounds.size.height))   secondPath.closeSubpath()   secondWaveLayer.path = secondPath } 

這里創建都是通過for循環創建路徑,其路徑是通過正弦函數,記得不錯的話,是在初中的時候學的,哈哈。同時,創建好路徑后,要給layer,這樣的話,shapeLayer才能知道要繪制什么樣的路徑和圖形。同時這兩個要有個角度的差值,這樣的話,才能產生相應的效果。

總結:

看到這里同學是不是感覺很簡單呀,好了,就說到這里,其下載的地址我這邊會稍后上傳的。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成人免费小视频| 国产欧美精品xxxx另类| 成人免费自拍视频| 国产色婷婷国产综合在线理论片a| 欧美精品aaa| 日韩美女主播视频| 欧美激情视频在线| 国产欧美一区二区三区四区| 国产在线观看一区二区三区| 亚洲最大福利视频网站| 久久久久久这里只有精品| 亚洲国产99精品国自产| 日本亚洲精品在线观看| 亚洲国产精品一区二区久| 亚洲欧美制服第一页| 国产精品美女午夜av| 日韩av片电影专区| 国产精品一区二区久久久久| 亚洲成人av片| 91国偷自产一区二区三区的观看方式| 精品国产福利视频| 亚洲精品短视频| 国产精品久久久久久久久久久久| 精品久久久香蕉免费精品视频| 美女视频久久黄| 欧美日韩精品在线播放| 伊人久久精品视频| 91精品国产成人www| 精品久久久久人成| 4k岛国日韩精品**专区| 欧美一级视频在线观看| 一夜七次郎国产精品亚洲| 尤物九九久久国产精品的特点| 尤物yw午夜国产精品视频明星| 中文字幕日韩欧美| 国产精品亚洲一区二区三区| 久久国产加勒比精品无码| 亚洲裸体xxxx| 日韩精品在线观看一区二区| 欧美日韩国产精品一区二区不卡中文| 亚洲另类图片色| 亚洲第一色中文字幕| 欧美日韩美女在线观看| 92国产精品久久久久首页| 亚洲欧美日韩中文在线| 亚洲曰本av电影| 成人黄在线观看| 欧洲成人免费aa| 亚洲国产天堂网精品网站| 91欧美精品午夜性色福利在线| 精品久久国产精品| 精品中文字幕在线| 欧美激情成人在线视频| 在线丨暗呦小u女国产精品| www欧美日韩| 欧美日韩福利视频| 日本aⅴ大伊香蕉精品视频| 亚洲经典中文字幕| 美女扒开尿口让男人操亚洲视频网站| 欧美大奶子在线| 欧美黑人一区二区三区| 欧美一级淫片播放口| 欧美—级高清免费播放| 国产精品一区二区久久久久| 国产精品久久不能| 96精品视频在线| 欧美一级淫片丝袜脚交| 91影院在线免费观看视频| 日韩精品极品毛片系列视频| 中文字幕久热精品视频在线| 欧美日韩性生活视频| 97婷婷大伊香蕉精品视频| 91国产一区在线| 国产精品普通话| 亚洲区免费影片| 狠狠色噜噜狠狠狠狠97| 最近日韩中文字幕中文| 日本午夜精品理论片a级appf发布| 日本亚洲欧洲色| 九九视频这里只有精品| 91香蕉国产在线观看| 久久免费视频观看| 精品国产依人香蕉在线精品| 91手机视频在线观看| 国产精品一区二区三区成人| 午夜欧美大片免费观看| 91手机视频在线观看| 国产精品wwww| 亚洲肉体裸体xxxx137| 色综合久久久888| 欧美一级在线亚洲天堂| 色视频www在线播放国产成人| 国产精品专区一| 欧美日韩国产限制| 欧美黑人性生活视频| 国产99久久精品一区二区永久免费| 亚洲欧美日韩在线一区| 欧美在线观看日本一区| 国产精品美女在线观看| 欧美高清在线播放| 最近的2019中文字幕免费一页| 欧美性猛交丰臀xxxxx网站| 国产中文日韩欧美| 欧美在线精品免播放器视频| 亚洲区中文字幕| 乱亲女秽乱长久久久| 亚洲国产精品成人va在线观看| 热re91久久精品国99热蜜臀| 精品国产成人在线| 日韩在线精品一区| 久久久久久久999精品视频| 国产精品视频白浆免费视频| 久久九九全国免费精品观看| 国产欧美精品va在线观看| 色偷偷888欧美精品久久久| 日韩在线精品一区| 91精品国产自产91精品| 欧美成人免费在线视频| 欧美有码在线视频| 亚洲美女久久久| 国产精品视频内| 国产精品久久久久免费a∨大胸| 国产成人精品亚洲精品| 国产精品第1页| 欧美男插女视频| 日韩男女性生活视频| 欧美一级片一区| 亚洲天堂男人天堂| 疯狂蹂躏欧美一区二区精品| 久久精品久久久久久国产 免费| 国产精品国产亚洲伊人久久| 亚洲欧美国内爽妇网| 欧美日韩成人黄色| 欧美成人免费大片| 91久久久久久国产精品| 亚洲娇小xxxx欧美娇小| 国产在线视频2019最新视频| 欧美一级大片在线观看| 91在线无精精品一区二区| 日韩精品极品在线观看| 欧美极品少妇xxxxⅹ裸体艺术| 国产精品久久久久国产a级| 精品久久香蕉国产线看观看亚洲| 成人激情视频小说免费下载| 欧美丝袜美女中出在线| 中文字幕久热精品在线视频| 欧美精品日韩www.p站| 日韩乱码在线视频| 欧美精品激情blacked18| 久久久www成人免费精品张筱雨| 这里只有精品在线播放| 国产精品狼人色视频一区| 亚洲国产精久久久久久| 欧美黑人xxxx| 亚洲免费一级电影| 欧美日韩另类视频| 久久成人18免费网站| 日韩小视频在线观看| 成人性生交大片免费看视频直播| 精品成人av一区| 欧美日韩aaaa| 国产精品美女久久久免费| 136fldh精品导航福利| 国产日韩欧美黄色|