iOS Core Animation(二)- 屬性

UIView三個重要的布局屬性:frame,bounds,center
CAlayer與之對應的屬性:frame,bounds,position

  • frame代表圖層的外部坐標(相對于自己的父圖層)
  • bounds是內部坐標({0,0}通常是圖層的左上角)
  • center和position都代表了相對于父圖層anchorPoint所在的位置
UIView和CALayer的坐標系

視圖的frame,bounds和center屬性僅僅是存取方法,當操作視圖的frame,實際上是改變位于視圖下方CALayer的frame,不能夠獨立于圖層之外改變視圖的frame

視圖或者圖層的frame是根據bounds,position和transform計算而來


旋轉之后的視圖和圖層的frame
錨點(anchorPoint)

anchorPoint是CGPoint的屬性,是圖層的相對坐標默認坐標是(0.5,0.5)


改變anchorPoint的效果
坐標系

使用過UIView的相對坐標變換的方法,你就很容易理解與其對應的CALayer在不同圖層的坐標系中相互轉換的方法,這些方法可以把定義在一個圖層坐標系下的點或者矩形轉換成另一個圖層坐標系下的點或者矩形.

- (CGPoint)convertPoint:(CGPoint)point fromLayer:(CALayer *)layer;
- (CGPoint)convertPoint:(CGPoint)point toLayer:(CALayer *)layer;
- (CGRect)convertRect:(CGRect)rect fromLayer:(CALayer *)layer;
- (CGRect)convertRect:(CGRect)rect toLayer:(CALayer *)layer;
翻轉的幾何結構(geometryFlipped)

在iOS中,圖層的布局坐標系的原點是在圖層的左上角。在iOS上通過設置geometryFlipped為YES,以為這它的子圖層將會被垂直翻轉,也就是將會沿著底部排版而不是通常的頂部
如果父視圖使用了翻轉變換,它的子視圖內容(以及它對應的圖層)將會被顛倒,設置子圖層的geometryFlipped屬性為YES可以修正。不推薦使用

Z坐標軸(zPosition和anchorPointZ)

CALayer存在于一個三維空間中,zPositon和anchorPointZ都是在Z軸上描述圖層位置的浮點類型。zPosition最實用的功能是改變圖層的顯示順序。
以我們的視角來看,zPosition越大就越靠近我們,就顯示在上層

Hit Testing

CALayer不關心任何響應鏈事件,但是我們可以通過:-containsPoint:和-hitTest:

  • containsPoint接收一個在圖層坐標系下的CGPoint,如果點在圖層的frame范圍內則返回YES
  • hitTest接收CGPoint,但是返回的不是BOOL類型而是返回點擊的圖層本身
  • hitTest返回的圖層是按照圖層樹中的圖層順序,如果改變了zPosition從而改變了屏幕上圖層顯示的順序,則返回的圖層可能是被遮擋的其他圖層
conrnerRadius

conrnerRadius設置圖層角的曲率和maskToBounds配合使用

borderWidth和borderColor

borderWidth是繪制在圖層邊界里邊的,而且在所有子視圖之前,默認0
borderColor默認黑色

陰影
  • shadowColor :陰影的顏色
  • shadowOpacity:0-1之間的浮點數,可以理解為陰影的透明度
  • shadowOffset:CGSize類型,寬度控制陰影橫向的位移,高度控制縱向的位移,默認值為(0,-3),意味著相對于Y軸向上位移三個點(為什么要默認向上的陰影呢?盡管Core Animation是從圖層套裝演變而來(可以認為是為iOS創建的私有動畫框架),但是呢,它卻是在Mac OS上面世的,前面有提到,二者的Y軸是顛倒的。這就導致了默認的3個點位移的陰影是向上的。在Mac上, shadowOffset 的默認值是陰影向下的,這樣你就能理解為什么iOS上的陰影方向是向上的了
  • shadowRadius:控制陰影的模糊度,數值越大,邊界線看上去就會更加的模糊和自然
  • shadowPath:CGPathRef類型(一個指向CGPaht的指針),可以通過這個屬性單獨于圖層形狀之外指定陰影的形狀
----注----
  • 圖層的陰影繼承自內容的外形
  • 陰影通常在Layer之外,如果開啟maskToBounds屬性,則會將陰影剪切掉,如果想要得到效果,單獨創建一個繪制陰影的外圖層
  • 如果事先知道了陰影的形狀,可以使用shadowPath來提高性能
mask

mask:CALayer類型,定義父圖層的部分可見區域,CALayer蒙板圖層真正厲害的地方在于蒙板圖不局限于靜態圖,任何有圖層構成的都可以作為mask屬性,這意味著你的蒙版可以通過代碼甚至是動畫實時生成

minificationFilter和magnificationFilter

設置layer的contents數據縮放拉伸時的描繪方式,minificationFilter用于縮小,magnificationFilter用于放大

  • kCAFilterLinear:默認值,縮放平滑,但容易產生模糊效果
  • kCAFilterTrilinear:基本和kCAFilterLinear相同
  • kCAFilterNearest:速度快不會產生模糊,但會降低質量并像素化圖像
    #######線性過濾保留了形狀,最近過濾則保留了像素的差異
opacity

UIView通過alpha屬性確定視圖的透明度,CALayer有一個等同的屬性opacity。兩個屬性都將影響子層級的透明度。
如果你設置了圖層的透明度,你希望它包含的整個圖層樹想一個整體一樣透明,你可以通過下列方法達到效果:
1.設置Info.plist文件中的UIViewGroupOpacity為YES,缺點是會影響到整個應用
2.設置CALayer的一個
shouldRasterize屬性,如果它被設置為YES,在應用透明度更改之前,圖層及其子圖層會被整合成一張整體的圖片,為了啟用shouldRasterize屬性,我們設置了圖層的rasterizationScale**屬性,默認情況下是1,使用shouldRasterize時需要設置,防止出現Retina屏幕像素化的問題(shouldRasterize可以緩存圖層內容,可以優化性能)

上一篇:iOS Core Animation(一)
下一篇:iOS Core Animation(三)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,578評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,701評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,691評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,974評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,694評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,026評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,015評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,193評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,719評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,442評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,668評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,151評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,846評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,255評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,592評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,394評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容