給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;