各種Layer
一姨丈、CAEmitterLayer 粒子發(fā)生器
CAEmitterLayer用來實現(xiàn)基于Core Animation的粒子發(fā)生器系統(tǒng)邻悬。每個粒子都是一個CAEmitterCell的實例。粒子繪制在背景色與border之上熙兔。
在屬性中容客,可以指定Layer中的CAEmitterCell數(shù)組,每個cell定義了自己的一組屬性二跋,如速度战惊、粒子發(fā)生率、旋轉(zhuǎn)扎即、縮放或者內(nèi)容等吞获。每個粒子也都有一個emitterCells屬性,可以做為一個粒子發(fā)生器來運作谚鄙。Layer還可以設(shè)置發(fā)生器位置各拷、發(fā)生器形狀、發(fā)射單元的位置等等闷营。
下面是一段例子:
CAEmitterLayer通過emitterPosition指定了emitter的位置撤逢,在view的中間偏下的地方,并且形狀為默認的一個點粮坞。renderMode定義了粒子的渲染方式蚊荣,在這里讓所有的粒子出現(xiàn)疊加增強的效果。birthRate讓粒子每秒產(chǎn)生四個莫杈。
CAEmitterCell指定contents來定義了粒子的內(nèi)容互例,emissionLongitude和emissionLatitude指定了經(jīng)緯度,經(jīng)度角代表了x-y軸平面上與x軸之間的夾角筝闹,緯度角代表了x-z軸平面上與x軸之間的夾角媳叨。emissionRange設(shè)置了一個范圍腥光,圍繞著y軸負方向,建立了一個圓錐形糊秆,粒子從這個圓錐形的范圍內(nèi)打出武福。lifetime設(shè)置了粒子的存活時長,在1.6秒之后痘番,粒子消失捉片。birthRate定義每秒生成100個,與CAEmitterLayer的birtuRate相乘汞舱,即最終的粒子數(shù)量400個每秒伍纫。velcity指定了初速度,velcityRange設(shè)置初速度在300到500之間浮動昂芜,yAcceleration指定了沿y軸250的加速度莹规,用于給粒子減速。color設(shè)置了粒子的顏色泌神,并設(shè)置了每個色值的浮動范圍良漱,用于生成所有顏色的煙火。最后設(shè)置了名稱欢际,以后可以再次引用它债热。效果如下:
二、CAGradientLayer
CAGradientLayer用來繪制漸變色幼苛,指定幾個顏色值、漸變結(jié)束位置焕刮,就能在layer中繪制出漸變效果舶沿。下面是一段例子:
例子中的layer是加在一個UIImageView之上的,設(shè)置為半透明配并,在漸變色下顯示出圖片內(nèi)容括荡。colors指定漸變色選取紅色、綠色和藍色三色溉旋。locations設(shè)置了紅色與綠色的漸變區(qū)域在20%與50%之間畸冲,小于20%的位置為紅色,50%位置為綠色观腊,綠色與藍色的漸變區(qū)域在50%與80%之間邑闲,大于80%的位置為藍色。startPoint設(shè)置為左上角梧油,endPoint設(shè)置為右下角苫耸,顏色從左上角逐漸變到右下角。
效果如下:
三儡陨、CAReplicatorLayer
CAReplicatorLayer創(chuàng)建layer和它的sublayer的多個副本褪子,副本可以設(shè)置transform來變形量淌,或者設(shè)置顏色、透明度的變化嫌褪。
例子如下:
webView繼承自UIWebView呀枢,重寫了layerClass方法,改用CAReplicatorLayer笼痛。設(shè)置instanceCount為2裙秋,那么就有一個原layer和一個副本layer。創(chuàng)建一個CATransform3D晃痴,讓它向下移動残吩,頂部和原layer相隔5,旋轉(zhuǎn)副本layer倘核,將其倒置泣侮,然后將它的高度縮小成80%,最后將變化賦值給instanceTransform紧唱。instanceAlphaOffset活尊、instanceRedOffset、instanceGreenOffset漏益、instanceBlueOffset都設(shè)置為-0.1蛹锰,每個副本都在上一個的基礎(chǔ)上將透明度、RGB三色減小0.1绰疤。
效果如下:
四铜犬、CAScrollLayer
CAScrollLayer提供了和UIScrollView的基本功能。只不過它是layer轻庆,只負責顯示癣猾,不響應用戶事件,也不提供滾動條余爆。
例子如下:
CAScrollLayer上添加一個子layer纷宇,layer的內(nèi)容是一張大圖片,scrollLayer又作為一個子layer加到當前view中蛾方。在當前View上添加了手勢像捶,當觸發(fā)平移手勢時,獲取平移的量桩砰,調(diào)用CAScrollLayer的scrollToPoint方法拓春,讓scrollLayer滾動一定位置。設(shè)置scrollMode為兩個方向均可滾動亚隅,來允許向各個方向滾動痘儡,也可以限制只能在一個方向上滾動。
五枢步、CATiledLayer
CATiledLayer提供異步加載圖片各部分的功能沉删。layer的drawLayer:inContext:方法會在出現(xiàn)時回調(diào)渐尿,用來繪制對應部分的內(nèi)容》澹可以通過Context的clip bounds和CTM(當前圖形上下文的仿射變換砖茸,CGContextGetCTM方法)來判斷是圖片的哪一部分以及大小。
例子如下:
在View中殴穴,通過重寫layerClass來設(shè)置layer為CATiledLayer凉夯,init方法中,設(shè)置layer的tileSize為100x100的大小采幌,那么其中的每塊大小都是100x100劲够。在drawLayer:inContext:方法中,通過CGContextGetClipBoundingBox方法獲取到了需要繪制的圖形上下文的位置與大小休傍,之后將其填充為帶邊框的紅色征绎。在調(diào)用view的時候,設(shè)置view的frame為一個很大的區(qū)域磨取,放置到scrollView中人柿,當某個區(qū)域可見時,會調(diào)用drawLayer:方法來繪制此區(qū)域忙厌,而沒有通過滾動顯示的區(qū)域不會繪制凫岖。
效果如下:
六、CATransformLayer
CATransformLayer用來創(chuàng)建3D的layer結(jié)構(gòu)逢净,而不是CALayer那樣的扁平結(jié)構(gòu)哥放。和普通layer不同的地方有:
1、transform layer只渲染sublayers爹土,那些從CALayer繼承下來的屬性不起作用甥雕,包括:backgroundColor, contents, border style properties, stroke style properties等。
2着饥、2D圖片的處理屬性也不起作用,包括:filters, backgroundFilters, compositingFilter, mask, masksToBounds以及陰影屬性惰赋。
3宰掉、opacity屬性會應用到每個sublayer,transform layer并不作為一個整體來實現(xiàn)半透明效果赁濒。
4轨奄、在transform layer上不可以調(diào)用hitTest:方法,因為它并不存在一個2D的坐標空間來定位所測試的點拒炎。
在transform layer上設(shè)置sublayerTransform的m34值挪拟,定位一個透視點,sublayer上應用z軸位置變換的動畫击你,就可以看到3D效果玉组。
效果如圖: