前言
在最近進行項目性能優化的過程中,遇到view圓角優化的問題,有一些粗略的看法,現總結一下。分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。
設置圓角目前知道的有四種方法:
1、通過shapeLayer設置
2、通過view的layer設置
3、通過BezierPath設置
4、通過貼圖的方式設置
1、shapeLayer的實現
通過bezizerpath設置一個路徑,加到目標視圖的layer上。代碼如下:
// 創建一個view UIView *showView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)]; [self.view addSubview:showView]; showView.backgroundColor = [UIColor whiteColor]; showView.alpha = 0.5; // 貝塞爾曲線(創建一個圓) UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(100 / 2.f, 100 / 2.f) radius:100 / 2.f startAngle:0 endAngle:M_PI * 2 clockwise:YES]; CAShapeLayer *layer = [CAShapeLayer layer]; layer.frame = showView.bounds; layer.path = path.CGPath; [showView.layer addSublayer:layer];
2、view的layer的實現
通過view的layer直接設置的方式,是所有的方法中最簡單的,代碼如下:
- (UIImageView *)avatarImage { if (!_avatarImage) { _avatarImage = [[UIImageView alloc] initWithFrame:CGRectMake(20,10, avatarDiameter, avatarDiameter)]; _avatarImage.backgroundColor = [UIColor grayColor]; _avatarImage.contentMode = UIViewContentModeScaleAspectFit; _avatarImage.layer.cornerRadius = avatarDiameter/2.0; _avatarImage.layer.masksToBounds = YES; [_avatarImage setImage:[UIImage imageNamed:@"test.jpg"]]; } return _avatarImage;}
3、BezierPath的實現
BezierPath的實現方式繼承UIView,自己實現一個customview,代碼如下。
- (instancetype)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { } return self;}- (void)drawRect:(CGRect)rect { // Drawing code CGRect bounds = self.bounds; [[UIColor whiteColor] set]; UIRectFill(bounds); [[UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:CGRectGetWidth(bounds)/2.0] addClip]; [self.image drawInRect:bounds];}
4、貼圖的實現
貼圖的方式是使用一個中間是圓形鏤空的圖覆蓋在需要圓角化的圖片的上方。代碼如下:
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { [self.contentView addSubview:self.avatarImage]; [self.contentView addSubview:self.maskImage]; } return self; }- (UIImageView *)avatarImage { if (!_avatarImage) { _avatarImage = [[UIImageView alloc] initWithFrame:CGRectMake(20,10, avatarDiameter, avatarDiameter)]; _avatarImage.backgroundColor = [UIColor grayColor]; _avatarImage.contentMode = UIViewContentModeScaleAspectFit; [_avatarImage setImage:[UIImage imageNamed:@"test.jpg"]]; } return _avatarImage; } //中心鏤空的圖 - (UIImageView *)maskImage { if (!_maskImage) { _maskImage = [[UIImageView alloc] initWithFrame:CGRectMake(20,10, avatarDiameter, avatarDiameter)]; _maskImage.contentMode = UIViewContentModeScaleAspectFit; [_maskImage setImage:[UIImage imageNamed:@"corner_circle.png"]]; } return _maskImage;}
如果大家有什么好的方法,希望推薦給我。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。
新聞熱點
疑難解答