實現UIView任意圓角+繪制陰影


給UIView設置圓角時,傳統方式都是設置layer的masksToBounds 為 YES時,這種方式會觸發離屏渲染(offscreen rendering),導致APP的幀率下降,特別是如果在cell上這么用,tableView滑動時特別耗性能,會有明顯卡頓。
 
 CGSize viewSize = self.frame.size;
    CAShapeLayer *maskLayer = [CAShapeLayer layer];
    maskLayer.frame = CGRectMake(0, 0, viewSize.width, viewSize.height);
    
    CAShapeLayer *shapeLayer = [CAShapeLayer layer];
    shapeLayer.frame = CGRectMake(0, 0, viewSize.width, viewSize.height);
    shapeLayer.fillColor = [UIColor clearColor].CGColor;
    shapeLayer.strokeColor = borderColor.CGColor;
    shapeLayer.lineWidth = borderWidth;
    
    UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, viewSize.width, viewSize.height) cornerRadius:radius];
    shapeLayer.path = path.CGPath;
    maskLayer.path = path.CGPath;
    
    [self.layer insertSublayer:shapeLayer atIndex:0];
    [self.layer setMask:maskLayer];

 

還有一種更加簡單的,還可以解決陰影和圖片等沖突問題

self.layer.shadowColor = shadowColor.CGColor;
    self.layer.borderColor = self.layer.shadowColor; // 邊框顏色建議和陰影顏色一致
    self.layer.borderWidth = 0.000001; // 只要不為0就行
    self.layer.cornerRadius = radius;
    self.layer.shadowOpacity = shadowOpacity;
    self.layer.shadowRadius = shadowRadius;
    self.layer.shadowOffset = shadowOffset;

 

 


免責聲明!

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



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