Core Animation - 寄宿圖<一>


  1. contents
    寄宿圖如其名,它本身並不是這一塊的,只是被放在這里寄宿的。在Core Animation中CALayer有一個屬性叫做contents,它被定義為id類型,意味着contends可以是任何類型的對象,但除非我們給contents賦CGImage類型的值,否則得到的將是一片空白。
    但是我們並不能直接給contents賦值,Core Foundation和Cocoa的類型不能夠兼容,所以我們需要對賦值的image做一個類型轉化,上一篇博客中我們創建了一個簡單的CALayer項目,現在我們往工程中加入一張圖片,並賦值給contents,如下:
layer.contents = (__bridge id)image.CGImage;

此處UIImage有一個CGImage屬性,它返回一個CGImageRef類型,直接賦值的話編輯器會報錯,因為它不是一個Cocoa對象,而是一個Core Foundation類型,所以才有了上面的轉化。

2.contentGravity
在視圖中我們叫做contentModel,而在圖層中,我們叫做contentGravity,它的作用是調整圖片的比例,因為我們加載的圖片有時候並不是很合適這個圖層或者視圖,所以這會導致圖片變形,那么為了很好的解決這個問題我們用contentGravity或者contentModel來對圖片做一些調整:
在view中

 view.contentMode = UIViewContentModeScaleAspectFit;

在CALayer中

self.layerView.layer.contentsGravity = kCAGravityResizeAspect;

這是一個枚舉,它還有其他的值可以設置,大家可以自己在工程里面查看。

3.contentsScale
contentsScale是寄宿圖的像素尺寸和視圖大小的比例,默認為1.0,當這個屬性設置為1.0的時候代表每個點為一個像素繪制圖片,當為2.0的時候代表每個點為兩個像素繪制圖片。在我們開發中,經常會用到一倍圖,二倍圖,甚至三倍圖,說的其實就是這個。它的作用是拉伸圖片以適應圖層,並不會考慮到分辨率的問題,所以設置太高圖片就會顯示顆粒狀,在使用UIImage設置圖片的時候,由於CGImage沒有拉伸的概念,所以在轉化的時候CGImage就丟失了,而UIImage直接讀取了高質量的retain圖片,就會使圖片像素很低,出現模糊,這時候我們可以手動來修復這個問題,設置CALayer的contentsScale為圖片的scale:

UIImage *image = [UIImage imageNamed:@"Snowman.png"]; self.layerView.layer.contents = (__bridge id)image.CGImage;
self.layerView.layer.contentsGravity = kCAGravityCenter;
self.layerView.layer.contentsScale = image.scale;

當沒有圖片時,我們設置為屏幕的scale

layer.contentsScale = [UIScreen mainScreen].scale;

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com