在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

您好,歡迎來電子發燒友網! ,新用戶?[免費注冊]

您的位置:電子發燒友網>源碼下載>通訊/手機編程>

iOS仿Mac窗口最小化的原理

大小:4.22 MB 人氣: 2017-09-25 需要積分:1

前言

這次仿照Mac窗口最小化時的神奇效果(官方的中文版本是這么叫的,聽起來很尷尬),做了一個iOS版本的。基礎代碼都沿用自iOS特效之破碎的ViewController。先來看一下效果圖。

?

原理

首先要分析一下官方的動畫是如何進行的,下面是效果的截圖。動畫分為兩步,先是將圖片扭曲成下面的樣子,然后再吸入到左側。想要做圖片扭曲,用一個nxm的3D網格就可以了。n和m越大,扭曲后得到的邊緣越平滑。

?

在上圖的基礎上加入一個坐標軸,這樣便于觀察規律。

?

在動畫執行過程中,網格上的點會沿著一個方向縮放,我們稱縮放的軸為縮放軸,圖中的縮放軸是y軸。同時還需要在縮放軸上指定一個縮放中心點。在動畫的第二個階段,所有點會沿著一個方向移動,我們稱這個軸為移動軸,圖中的移動軸是x軸。

動畫第一階段

在動畫的第一個階段中,網格上的點只在縮放軸上移動。我們假設一個點在移動軸上的位置為movLoc,那么我們可以使用公式0.5 * 0.98 * cos(3.14 * movLoc + 3.14) + 0.5 + 0.01;計算出第一階段結束時,該點需要向縮放中心點縮放的量。為什么是這個公式呢,我給大家貼一張圖就清楚了。是不是和上面的邊緣曲線有點像。圖我是用Mac自帶的Grapher繪制的。在調試曲線的過程中Grapher的確非常好用。公式里的0.98和0.01是相關的兩個量,控制左邊窄口的大小。0.01 = (1 - 0.98) / 2。動畫第一階段主要的工作就是根據當前動畫的進度百分比,控制點到達最終縮放量的進度即可。

?

動畫第二階段

第二階段主要就是移動軸上的移動,我們可以根據最遠移動距離和當前的動畫進度計算出當前點在移動軸上的位置。然后根據當前的位置計算出縮放軸上需要的縮放量。最遠距離可以通過吸入點和另一側的邊界計算出來。

Shader

了解完原理我們來看Shader代碼吧。Swift代碼比較簡單,只是生成了一個撐滿屏幕的nxm網格,稍候再說。

傳入Shader的數據

VertexIn和VertexOut很普通,包含頂點位置和紋理坐標。Uniforms里包含了動畫相關的信息,當前動畫經過的時間animationElapsedTime,動畫總時間animationTotalTime,吸入點gatherPoint。

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發表評論

      用戶評論
      評價:好評中評差評

      發表評論,獲取積分! 請遵守相關規定!

      ?
      主站蜘蛛池模板: 欧美特黄视频在线观看 | 亚洲 欧美 精品专区 极品 | 亚洲五月婷 | 亚洲xx网 | 成人国产精品一级毛片视频 | 国产精品免费拍拍拍 | 国产高清亚洲 | 成人www视频| 91亚洲视频 | 91亚洲免费视频 | 美女网站在线观看视频18 | 狠狠干人人干 | 午夜精品视频 | 日韩在线免费看网站 | 国产视频h| 欧美αv| 手机看片福利盒子久久青 | 五月桃花网婷婷亚洲综合 | 人人天天夜夜 | 黄色日批网站 | 狠狠色丁香婷婷综合激情 | 久久久中文 | 黄网免费 | 三级网站在线免费观看 | 欧美成网| 国产伦精品一区二区三区在线观看 | www.嫩草影院| 色视频免费观看高清完整 | 黄 色 成 年人网站 黄 色 成 年人在线 | 日韩欧美亚洲综合一区二区 | 欧美日韩国产另类一区二区三区 | 性性性性bbbbxxxx| 激情综合视频 | 免费一级黄 | 青草久草视频 | 精品三级在线观看 | h视频网站在线 | 日韩毛片视频 | 五月天福利视频 | 免费xxxx大片 | 怡红院国产 |