zoukankan      html  css  js  c++  java
  • IOS_视图实现圆角效果的三种方法及比较

    通过代码,至少有三种方法可以为视图加上圆角效果。附例子:
    https://github.com/weipin/RoundedCorner

    方法一、layer.cornerRadius

    第一种方法最简单,通过层对象的cornerRadius属性实现圆角效果,代码如下:

    view.layer.cornerRadius = 8.0;
    view.layer.masksToBounds = YES;

    缺点是会有2次rending passes。首先off-screen画出带圆角的图,然后在视图上画第二次。

    方法二、通过UIBezierPath对象设置带圆角的作图区域

    这种方法的好处是只有一次rending pass,是三种方法中效率最高的。缺点是需要override视图。代码如下:

    - (void)drawRect:(CGRect)rect {
    CGRect bounds = self.bounds;

    [[UIColor whiteColor] set];
    UIRectFill(bounds);

    [[UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:8.0] addClip];

    [self.image drawInRect:bounds];
    }

    方法三、通过另一张mask图创建新图


    首先需要一张mask图,然后将这张mask图和原图合成,得到带圆角的新图。效率和方法一类似,合成新图等同于在off-screen作图。该方法的优点是可以不局限于圆角,全凭mask图控制。

    总结:

    如果要效率(例如要提高table view的滚动帧数),就多用方法二。要方便,自然是方法一。如果需要的特殊形状UIBezierPath对象无法构成,则考虑方法三。

    例子:https://github.com/weipin/RoundedCorner

    例子中,tab 1是无圆角效果,其他三个tab各自对应三种方法。

  • 相关阅读:
    闭关
    我现在很好
    asp.net看不明白怎么办?
    中秋节
    今天很开心
    偶尔伤感
    现在是10月4日了!
    2006的最后一天
    十多天都不写博客了
    呵呵  最近很忙  但是很充实!
  • 原文地址:https://www.cnblogs.com/ccguo/p/4186955.html
Copyright © 2011-2022 走看看