UICollectionViewCell設置陰影


    //@mg:masksToBounds必須為NO否者陰影沒有效果

//    cell.layer.masksToBounds = NO;

    cell.layer.contentsScale = [UIScreen mainScreen].scale;

    cell.layer.shadowOpacity = 0.75f;

    cell.layer.shadowRadius = 4.0f;

    cell.layer.shadowOffset = CGSizeMake(0,0);

    cell.layer.shadowPath = [UIBezierPath bezierPathWithRect:cell.bounds].CGPath;

    //設置緩存

    cell.layer.shouldRasterize = YES;

    //設置抗鋸齒邊緣

    cell.layer.rasterizationScale = [UIScreen mainScreen].scale;

 CALayer有一個叫做conrnerRadius的屬性控制着圖層角的曲率。它是一個浮點數,默認為0(為0的時候就是直角),但是你可以把它設置成任意值。默認情況下,這個曲率值只影響背景顏色而不影響背景圖片或是子圖層。不過,如果把masksToBounds設置成YES的話,圖層里面的所有東西都會被截取。

shadowOpacity屬性一個大於默認值(也就是0)的值,陰影就可以顯示在任意圖層之下。shadowOpacity是一個必須在0.0(不可見)和1.0(完全不透明)之間的浮點數。如果設置為1.0,將會顯示一個有輕微模糊的黑色陰影稍微在圖層之上。若要改動陰影的表現,你可以使用CALayer的另外三個屬性:shadowColorshadowOffsetshadowRadius

shadowOffset屬性控制着陰影的方向和距離。它是一個CGSize的值,寬度控制這陰影橫向的位移,高度控制着縱向的位移。shadowOffset的默認值是 {0, -3},意即陰影相對於Y軸有3個點的向上位移。

蘋果更傾向於用戶界面的陰影應該是垂直向下的,所以在iOS把陰影寬度設為0,然后高度設為一個正值不失為一個做法。

shadowRadius屬性控制着陰影的模糊度,當它的值是0的時候,陰影就和視圖一樣有一個非常確定的邊界線。當值越來越大的時候,邊界線看上去就會越來越模糊和自然。蘋果自家的應用設計更偏向於自然的陰影,所以一個非零值再合適不過了。

當陰影和裁剪扯上關系的時候就有一個頭疼的限制:陰影通常就是在Layer的邊界之外,如果你開啟了masksToBounds屬性,所有從圖層中突出來的內容都會被才剪掉。

從技術角度來說,這個結果是可以是可以理解的,但確實又不是我們想要的效果。如果你想沿着內容裁切,你需要用到兩個圖層:一個只畫陰影的空的外圖層,和一個用masksToBounds裁剪內容的內圖層。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM