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各自对应三种方法。

时间: 2024-08-29 04:10:40

IOS_视图实现圆角效果的三种方法及比较的相关文章

windows之实现3D立体效果的三种方法

第一种:快捷键:win+tab 第二种:cmd输入rundll32.exe dwmapi #105 第三种:使用软件bumptop windows之实现3D立体效果的三种方法

cocos2dx之实现扑克牌翻转效果的三种方法

*************************************************************************************** 时间:2015-04-10 作者:Sharing_Li 转载注明出处:http://blog.csdn.net/sharing_li/article/details/44980493 **********************************************************************

关于上一篇鼠标移到按钮时的“按下”效果的三种方法

上一篇博文中,关于按钮按下的效果回过头研究了下,总结了如下三种方法,只写出关键样式: 1.相对定位 1 input.button{ 2 3 position:relative; //用相对定位 4 } 5 6 input.button:hover{ 7 top:2px;//鼠标移动到此top增加2px 8 } 2.主要利用外边距这个属性,鼠标移动到按钮位置时,按钮上外边距增加2px,下外边距减少2px(相当于走出去2px又退回来2px),就可以达到按下效果,如果只是单独写margin-top:2

Android课程---Android设置透明效果的三种方法(转)

1.使用Android系统自带的透明效果资源 <Button  android:background="@android:color/transparent"/> 2.使用ARGB来控制 半透明 <Button  android:background="#e0000000"/> 透明 <Button  android:background="#00000000"/> 颜色和不透明度 (alpha) 值以十六进制

QT下的几种透明效果(三种方法:调色板,透明度属性,自绘)

1.窗口整体透明,但是窗体上的控件不透明. 通过设置窗体的背景色来实现,将背景色设置为全透.  QPalette pal = palette();  pal.setColor(QPalette::Background, QColor(0x00,0xff,0x00,0x00));  setPalette(pal); 试验效果: 窗体标题栏不透明: 窗体客户区上的控件不透明,QLabel控件只是字显示,控件背景色透明: 窗体客户区完全透明. 另外从网上看到的方法:  setAttribute(Qt:

MVC控制器向View视图传值的三种方法

首先创建一个MVC的项目,其中需要一个控制器(TestController),三个视图(index,edit,detail) 1.项目结构如下: 2.控制器向视图传值的三种方法 1)提供视图模型对象(直接把对象放在View里面) 2)通过VewBag传递数据 3)通过ViewData传递数据 3.控制器源码如下: using System;using System.Collections.Generic;using System.Linq;using System.Web;using Syste

YbSoftwareFactory 代码生成插件【二十五】:Razor视图中以全局方式调用后台方法输出页面代码的三种方法

上一篇介绍了 MVC中实现动态自定义路由 的实现,本篇将介绍Razor视图中以全局方式调用后台方法输出页面代码的三种方法. 框架最新的升级实现了一个页面部件功能,其实就是通过后台方法查询数据库内容,把查询结果的 HTML 代码呈现到 Razor 视图中,考虑到灵活性,需要能在任意 Razor 视图中调用该方法,这样任意 Razor 页面都能以统一的方式方便地共享该页面部件的 HTML 内容,这对于代码的重用性和可维护性都是非常有必要的. 为实现上述要求,本文介绍如下可供选择的三种方式.   1.

实现滑动门的三种方法

目录 [1]定义[2]案例效果 [3]切图[4]实现 三层嵌套 两层嵌套 绝对定位 [5]效果 定义 在border-radius出现之前,实现圆角效果使用的是滑动门.滑动门是利用背景图像的可层叠性,并允许他们在彼此之上进行滑动,以创造一些特殊的效果. 案例效果 切图 实现方法 滑动门的实现共三种方法:三层嵌套.两层嵌套和绝对定位. 三层嵌套 三层嵌套,文字只能写到最里面的div里,适用于图片比较大或者拓展要求高,比如导航. [注意1]要想让滑动门适用于多种场合,左右两个角必须透明,以此露出背景

#IOS-navigation中左滑pop的三种方法

IOS-navigation中左滑pop的三种方法 系统自带pop方法 如果我们没有对navigation中的back按钮进行自定义,我们可以直接使用系统自带的左滑pop方法.但是如果我们对back按钮,进行了自定义,我们就要对self.navigationController.interactivePopGestureRecognizer这个属性进行设置了. 关键代码 __weak typeof(self) weakSelf = self; self.navigationController.