iOS粒子系統CAEmitterLayer

開始iOS的動效學習,一開始只對普通的CALayer有所瞭解,偶然的機會想到作一些全局的飄灑的效果。當時採用最笨的方法經過不斷的建立CALayer結合UIView來實現動畫,效果其實還行。後來瞭解到CAEmitterLayer這個iOS系統下的粒子系統。git

  CAEmitterLayer這個CALayer須要設置的參數特別的多,每一種參數都會產生特定的效果,這裏本身摸索了下,記錄下來,最後作了個飄灑圓形圖片的效果。學習

 

  CAEmitterLayer的建立主要包括兩部分:CAEmitterLayer、CAEmitterCell,而後將其關聯起來就能夠了CAEmitterLayer.emitterCells = @[CAEmitterCell],基本代碼結構以下:動畫

  其實這段代碼就是咱們建立上面飄落效果的代碼,看吧,咱們須要作的事情就是爲了達到所想要的效果而不停的調整設置。那麼咱們須要理解的關鍵就在於理解裏面的各個字段,對每一個字段的改變所達到的效果有個瞭解。設計

  

  下面咱們列舉下所設置的參數以及其對應的效果3d

  Layer相關:對象

  position: 發射位置              blog

  CGPointMake(self.view.bounds.size.width, 0)           CGPointMake(self.view.bounds.size.width / 2, 0)  圖片

           

  

  emitterSize:發射源的尺寸大小,其實這個emitterSize結合position構建了發射源的位置及大小的矩形區域rectci

  emitterShape:發射源的形狀,這個字段規定了發射源的形狀it

      kCAEmitterLayerPoint:點形狀,發射源的形狀就是一個點,位置在上面position設置的位置

      kCAEmitterLayerLine:線形狀,發射源的形狀是一條線,位置在rect的橫向的位於垂直方向中間那條

      kCAEmitterLayerRectangle:矩形狀,發射源是一個矩形,就是上面生成的那個矩形rect

      kCAEmitterLayerCuboid:立體矩形形狀,發射源是一個立體矩形,這裏要生效的話須要設置z方向的數據,若是不設置就同矩形狀

      kCAEmitterLayerCircle:圓形形狀,發射源是一個圓形,形狀爲矩形包裹的那個圓,二維的

      kCAEmitterLayerSphere:立體圓形,三維的圓形,一樣須要設置z方向數據,不設置則通二維同樣

  emitterMode:發射模式,這個字段規定了在特定形狀上發射的具體形式是什麼

      kCAEmitterLayerPoints:點模式,發射器是以點的形勢發射粒子。

      若是發射形狀爲:kCAEmitterLayerPoint,則發射效果爲在發射點發射粒

      若是發射形狀爲:kCAEmitterLayerLine,則發射效果爲在直線兩端都進行粒子的發射

      若是發射形狀爲:kCAEmitterLayerRectangle,則發射效果爲矩形的四個角

      若是發射形狀爲:kCAEmitterLayerCircle,則發射效果同kCAEmitterLayerPoint同樣

  kCAEmitterLayerOutline: 這個模式下整個邊框都是發射點,即邊框進行發射

      若是發射形狀爲kCAEmitterLayerPoint:效果就仍是一個點進行發射

      若是發射形狀爲kCAEmitterLayerLine:效果就是哪條直線進行拋灑

      若是發射形狀爲kCAEmitterLayerRectangle:效果就是沿着那個矩形框的邊框進行發射

      若是發射形狀爲kCAEmitterLayerCircle:效果就是沿着那個圓形的邊框進行發射

      效果依次以下所示:

                        

                    

 

  kCAEmitterLayerSurface:這個模式下是咱們邊框包含下的區域進行拋灑

      若是發射形狀爲kCAEmitterLayerPoint:效果就仍是一個點進行發射

      若是發射形狀爲kCAEmitterLayerLine:效果就是哪條直線進行拋灑

      若是發射形狀爲kCAEmitterLayerRectangle:效果就是沿着那個矩形框的內部區域中進行發射

      若是發射形狀爲kCAEmitterLayerCircle:效果就是沿着那個圓形的邊框包含的區域中進行發射

      效果依次以下所示:

                    

                    

  

  kCAEmitterLayerVolume:這個的效果和kCAEmitterLayerSurface很像

 

  上面介紹了Layer方面發射形狀、發射位置、發射模式的探索,從上面可以大體構建本身想要的發射形狀。下面咱們就要探索拋灑的元素了CAEmitterCell相關的屬性來構建咱們想要拋灑的對象。

   contents:cell的內容,通常使用圖片,能夠採用已有的或者本身繪製均可。

   birthRate:出生率,這個就是表明每秒有多少個對象生成。

   lifetime:生存時間,這個表明對象可以存活的時間

   lifetimeRange:生存時間浮動,這個表明生存時間會在這個數字內浮動。好比lifetime = 10s, lifetimeRange = 5s那麼實際的每一個cell的lifetime = [5s - 15s]。

 

      velocity:運動速度,這個表明粒子在拋灑中的運動速度

  velocityRange:運動速度的浮動數字。同lifetimeRange的做用同樣,保證了每一個粒子可以有個隨機的速度值

      yAcceleration:Y方向的加速度,這個能夠模擬地球上的重力加速度,值越大則每一個粒子下落的越快

      velocity=40.f; yAcceleration=15.f  全部的對象都勻速運動,並且y方向有個不斷偏移的過程

  velocity=40.f; velocityRange=100.f; yAcceleration=80.f   全部對象的速度不恆定了,且沿着y方向的偏移愈加厲害了

 

  emissionLongitude:拋灑的角度,就是指定cell從什麼方向進行拋灑

  emissionRange: 拋灑角度的浮動角度,這個角度指定了拋灑出的對象可以在多大角度範圍內擴散。

        emissionLongitude=M_PI; emissionRange=M_PI_4

    emissionLongitude=0; emissionRange=M_PI_2

       

 

  scale: 對象的初始縮放大小

  scaleRange:對象的縮放擾動範圍

  scaleSpeed: 對象縮放的速度

 

  alphaRange:對象的透明度擾動範圍

  alphaSpeed:對象的透明度的變更速度

 

  color:對象的顏色,這裏咱們的cell能夠對圖片重新進行顏色的填充,因此若是對於咱們設計的一個單色的圖片來講,這個字段將頗有用

  redRange:紅色通道的擾動範圍

  greenRange:綠色通道的擾動範圍

  blueRange:藍色通道的擾動範圍

  redSpeed:紅色顏色的變動速度

  greenSpeed:綠色顏色的變動速度

  blueSpeed:藍色顏色的變動速度

  咱們經過上面的設置,能夠產生隨機的顏色數值,正如咱們實例中所示的那樣。須要注意的是若是咱們設置了redSpeed、greenSpeed、blueSpeed的話,對象的最後顏色可能變爲了白色或者黑色。

      redSpeed=.2f; greenSpeed=.2f; blueSpeed=.2f; 能夠看到對象會很快的失去光澤。

  

 

  固然你能夠對這些Layer進行動畫,譬如position, scale, birthRate 等等。譬如如下代碼就是讓他的position隨着touch移動,以及對scale作了動畫效果。代碼以下:

  而他的運行效果以下:

 

  固然還有不少能夠調節出來的效果,你們能夠組合不一樣的參數試試。這裏我只是簡單的組合了下,有個大概的印象。祝愉快!

相關文章
相關標籤/搜索