使用CAShapeLayer和UIBezierPath画一个自定义半圆弧button
2015-01-29 09:55
211 查看
通常我们使用系统自带的UIButton时,一般都是Rect矩形形式的,或则美工给出一张半圆弧的按钮,如图为一张半圆加三角形的按钮,而此时,如果给按钮添加点击事件时,响应事件依然为矩形区域,不符合我们的需求;
本文为解决这样的按钮问题:
如下图:使用CAShapeLayer和UIBezierPath画了一个button,这个按钮由一个半圆弧和三角形构成,现在我们需要点击黄颜色区域时,响应按钮点击事件,弹出对话框,其他白色区域,不响应点击事件;
第一步:
如下图,自定义一个类,CustomButton,继承于UIControl;本人觉得,如果要写一个自定义按钮,不需要button中的其他控件时,继承于UIControl比较好,如果按钮布局同系统UIButton,那么继承于UIButton比较好;
第二步:
在CustomButton.m文件中,对CustomButton类添加一个延展,声明三个成员变量;CAShapeLayer、id
、SEL;
第三步:
在CustomButton.m文件中,做好自定义配置;其中,centerPoint为半圆弧中心点,bottomPoint为三角形顶尖点,endPoint为圆弧起点和三角型左侧相连的点,这个点可以去掉,去掉之后,图形还是一样的,只是没有左侧那条红色的闭区间线条;
注意:[_target performSelectorOnMainThread:_action withObject:nil waitUntilDone:NO];调用者为_target,不是self;不然会crash,原因为定义的按钮无法识别响应事件;
最后:在ViewController中,使用CustomButton定义一个按钮,并调用相应的点击事件;即可得到文章开始的效果
本文出自 “才女金大福” 博客,请务必保留此出处http://liwenyu.blog.51cto.com/9864907/1609453
本文为解决这样的按钮问题:
如下图:使用CAShapeLayer和UIBezierPath画了一个button,这个按钮由一个半圆弧和三角形构成,现在我们需要点击黄颜色区域时,响应按钮点击事件,弹出对话框,其他白色区域,不响应点击事件;
第一步:
如下图,自定义一个类,CustomButton,继承于UIControl;本人觉得,如果要写一个自定义按钮,不需要button中的其他控件时,继承于UIControl比较好,如果按钮布局同系统UIButton,那么继承于UIButton比较好;
第二步:
在CustomButton.m文件中,对CustomButton类添加一个延展,声明三个成员变量;CAShapeLayer、id
、SEL;
第三步:
在CustomButton.m文件中,做好自定义配置;其中,centerPoint为半圆弧中心点,bottomPoint为三角形顶尖点,endPoint为圆弧起点和三角型左侧相连的点,这个点可以去掉,去掉之后,图形还是一样的,只是没有左侧那条红色的闭区间线条;
注意:[_target performSelectorOnMainThread:_action withObject:nil waitUntilDone:NO];调用者为_target,不是self;不然会crash,原因为定义的按钮无法识别响应事件;
最后:在ViewController中,使用CustomButton定义一个按钮,并调用相应的点击事件;即可得到文章开始的效果
本文出自 “才女金大福” 博客,请务必保留此出处http://liwenyu.blog.51cto.com/9864907/1609453
相关文章推荐
- 使用CAShapeLayer和UIBezierPath画一个自定义半圆弧button
- 自定义Button供整个项目使用,一个项目中只用这一个Button即可
- 自定义View的一个例子(这里使用了使用了自定义Button)
- 使用系统方法 创建一个 自定义样式的button
- 如何使用谷歌的自定义搜索引擎来搜寻一个ASP.NET网站【转】
- 如何使用谷歌的自定义搜索引擎来搜寻一个ASP.NET网站
- 如何使用Css样式自定义一个DataGrid的风格
- 使用主题自定义一个站点
- [原创]如何使用Css样式自定义一个DataGrid的风格
- 中国PHP程序员都犯的一个错误:使用错误的自定义insert_id函数
- 如何使用谷歌的自定义搜索引擎来搜寻一个ASP.NET网站
- 如何使用Css样式自定义一个DataGrid的风格
- 使用CSS给ASP.NET中的Button按钮添加一个指定位置的图片
- 实践中Javascript使用RegExp.$1导致trim()自定义函数的一个Bug
- 本文教你如何使用autoconf、automake等来制作一个以源代码形式(.tar.gz)发布的软件、并可在执行configure时使用自定义参数。
- 如何使用谷歌的自定义搜索引擎来搜寻一个ASP.NET网站
- 如何使用Css样式自定义一个DataGrid的风格
- 一个使用自定义命名空间的Schema文件,xml文件和castor生成的java代码的例子
- 多个Button使用同一个事件处理方法时判断是哪个Button发生了事件
- SHBrowseForFolder的使用,获取其中一个button的ID