美文网首页
iOS 如何高性能的给 UIImageView 加个圆角?

iOS 如何高性能的给 UIImageView 加个圆角?

作者: 进击的阿牛哥 | 来源:发表于2019-07-12 18:51 被阅读0次

    不好的解决方案:

    使用下面的方式会强制Core Animation提前渲染屏幕的离屏绘制, 而离屏绘制就会给性能带来负面影响,会有卡顿的现象出现。

    self.view.layer.cornerRadius =5.0f;

    self.view.layer.masksToBounds =YES;

    正确的解决方案:使用绘图技术

    - (UIImage*)circleImage {

    UIGraphicsBeginImageContextWithOptions(self.size,NO,0.0); // NO代表透明

    CGContextRefctx =UIGraphicsGetCurrentContext(); // 获得上下文

    CGRectrect =CGRectMake(0,0,self.size.width,self.size.height);CGContextAddEllipseInRect(ctx, rect);

    CGContextClip(ctx);  // 添加一个圆 裁剪

    // 将图片画上去

    [selfdrawInRect:rect];UIImage*image =UIGraphicsGetImageFromCurrentImageContext();

    // 关闭上下文

    UIGraphicsEndImageContext();returnimage;}

    还有一种方案:使用了贝塞尔曲线"切割"个这个图片, 给UIImageView 添加了的圆角,其实也是通过绘图技术来实现的。

    UIImageView*imageView = [[UIImageViewalloc] initWithFrame:CGRectMake(0,0,100,100)];imageView.center =CGPointMake(200,300);

    UIImage*anotherImage = [UIImageimageNamed:@"image"];

    UIGraphicsBeginImageContextWithOptions(imageView.bounds.size,NO,1.0);[[UIBezierPathbezierPathWithRoundedRect:imageView.bounds cornerRadius:50] addClip];

    [anotherImage drawInRect:imageView.bounds];

    imageView.image =UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    [self.view addSubview:imageView];

    相关文章

      网友评论

          本文标题:iOS 如何高性能的给 UIImageView 加个圆角?

          本文链接:https://www.haomeiwen.com/subject/rggykctx.html