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