zoukankan      html  css  js  c++  java
  • iOS 设置圆角小记

    在开发中我们经常会遇见设置控件圆角的属性,一般我们有三种处理方式

    1、使用CALayer 

    -(instancetype)cornerAngel:(CGFloat)angel
    {
        CALayer* layer=self.layer;
        layer.cornerRadius=angel;
        layer.masksToBounds=YES;
        return self;
        
    }

    2、使用CAShapeLayer

    - (void)setCornerOnTopRightOnBottomLeft:(CGFloat) conner {
        UIBezierPath *maskPath;
        maskPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds
                                         byRoundingCorners:(UIRectCornerTopRight | UIRectCornerBottomLeft)
                                               cornerRadii:CGSizeMake(conner, conner)];
        CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
        maskLayer.frame = self.bounds;
        maskLayer.path = maskPath.CGPath;
        self.layer.mask = maskLayer;
    }

    3、直接使用图片

    对比三种方案

    1、只能切四周圆角、使用简便

    2、配合UIBezierPath可以剪切任意形状、性能比1好、需要配合UIBezierPath使用、某些情况需要使用setNeedsLayout、layoutIfNeeded 方法。

    当设置圆角是在cell上时,不能在cellForRowAtIndexPath方法中直接设置,会有偶发失效问题,应当在willDisplayCell中设置

    //    添加刷新标记
        [self setNeedsLayout];
    //    让当前ruloop立即刷新(不调用这个方法不会立即刷新 会等到View Drawing Cycle循环到这里时才刷新)
        [self layoutIfNeeded];
    //    需要上边两行代码才生效(否则会视图不显示)
        [self.leftBtn setCornerOnTopRightOnBottomLeft:8];
    //    不需要上边两行代码直接生效
    //    [self.leftBtn cornerAngel:8];

     3、省事、但是占用资源

  • 相关阅读:
    asp.net 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction
    mvc EF 执行SQL语句
    MVC 自定义AuthorizeAttribute实现权限管理
    EF
    sql 、linq、lambda 查询语句的区别
    说说C#中的enum吧
    C# A窗口内容显示在B窗口中的方法
    C# 程序开始主要是写类和方法 的基本步骤和调用方法
    C# 文件流基本操作步骤
    Ghost命令使用方法
  • 原文地址:https://www.cnblogs.com/lijianyi/p/12074268.html
Copyright © 2011-2022 走看看