iOS 设置圆角(总结)

    xiaoxiao2021-03-25  124

    方式一:设置layer相关的属性

    最简单的一种,但是很影响性能。

    情景一:使用代码设置

    UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)]; //只需要设置layer层的两个属性 //设置圆角 imageView.layer.cornerRadius = imageView.frame.size.width / 2; //将多余的部分切掉 imageView.layer.masksToBounds = YES; [self.view addSubview:imageView]; 情景二:xib中设置              1、利用KVC设置(Key Path),下图                                   2、利用 IBInspectable设置,下图                                实现:项目中添加了一个UIView的分类,代码如下

    //

    //  UIView+BorderRadius.h

    //  DaZhongChuXing

    //

    //  Created by fujunzhi on 2017/3/10.

    //  Copyright © 2017 tony. All rights reserved.

    //

    #import <UIKit/UIKit.h>

    @interface UIView (BorderRadius)

    //加上IBInspectable就可以可视化显示相关的属性哦

    @property (nonatomic, strong) IBInspectable UIColor *borderColor;

    @property (nonatomic, assign) IBInspectable CGFloat borderWidth;

    @property (nonatomic, assign) IBInspectable CGFloat cornerRadius;

    @end

    //

    //  UIView+BorderRadius.m

    //  DaZhongChuXing

    //

    //  Created by fujunzhi on 2017/3/10.

    //  Copyright © 2017 tony. All rights reserved.

    //

    #import "UIView+BorderRadius.h"

    @implementation UIView (BorderRadius)

    - (void)setBorderColor:(UIColor *)borderColor {

       self.layer.borderColor = borderColor.CGColor;

    }

    - (UIColor *)borderColor {

       return [UIColor colorWithCGColor:self.layer.borderColor];

    }

    - (void)setBorderWidth:(CGFloat)borderWidth

    {

       self.layer.borderWidth = borderWidth;

    }

    - (CGFloat)borderWidth

    {

       return self.layer.borderWidth;

    }

    - (void)setCornerRadius:(CGFloat)cornerRadius

    {

       self.layer.cornerRadius = cornerRadius;

       self.layer.masksToBounds = cornerRadius > 0;

    }

    - (CGFloat)cornerRadius

    {

       return self.layer.cornerRadius;

    }

    @end

    IB_DESIGNABLE/IBInspectable的使用

    方式二:使用贝塞尔曲线UIBezierPath和Core Graphics框架画出一个圆角

    UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)]; imageView.image = [UIImage imageNamed:@"1"]; //开始对imageView进行画图 UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, NO, [UIScreen mainScreen].scale); //使用贝塞尔曲线画出一个圆形图 [[UIBezierPath bezierPathWithRoundedRect:imageView.bounds cornerRadius:imageView.frame.size.width] addClip]; [imageView drawRect:imageView.bounds]; imageView.image = UIGraphicsGetImageFromCurrentImageContext(); //结束画图 UIGraphicsEndImageContext(); [self.view addSubview:imageView];

    第三种方法:使用CAShapeLayer和UIBezierPath设置圆角

    首先需要导入<AVFoundation/AVFoundation.h>

    #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)]; imageView.image = [UIImage imageNamed:@"1"]; UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:imageView.bounds byRoundingCorners:UIRectCornerAllCorners cornerRadii:imageView.bounds.size]; CAShapeLayer *maskLayer = [[CAShapeLayer alloc]init]; //设置大小 maskLayer.frame = imageView.bounds; //设置图形样子 maskLayer.path = maskPath.CGPath; imageView.layer.mask = maskLayer; [self.view addSubview:imageView]; } 推荐的文章:

    小心别让圆角成了你列表的帧数杀手

    UIKit性能调优实战讲解 关于性能的一些问题

    内存恶鬼drawRect

    iOS 离屏渲染的研究

    转载请注明原文地址: https://ju.6miu.com/read-19935.html

    最新回复(0)