使用CAShapeLayer和UIBezierPath画一个自定义半圆弧button
通常我们使用系统自带的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定义一个按钮,并调用相应的点击事件;即可得到文章开始的效果
最新文章
- Aop动态生成代理类时支持带参数构造函数
- Thinking in React
- LoadRunner ---参数化数据源(oracle,mssql,excel)
- spotlight监控工具使用
- 【原创】【ViewPager+Fragment】ViewPager中切换界面Fragment被销毁的问题分析
- .net网站开发(一):1.input表单元素
- 我的Python成长之路---第六天---Python基础(19)---2016年2月20日(晴)
- 自定义开关ToggleButton
- FFmpeg源代码简单分析:avformat_find_stream_info()
- MVC Scaffolding SmartCode-Engine 更新
- Web从入门到放弃<;3>;
- Windbg 内核态调试用户态程序然后下断点正确触发方法(亲自实现发现有效)
- postgresql数据库删除时提示回话 sessions using the database
- Javascript 综合示例 网页扫雷游戏
- 学习Docker之Dockerfile的命令
- thinkphp验证器
- [笔记]后缀数组SA
- Doing Homework HDU - 1074
- 【ARM】2410裸机系列-按键查询式控制led
- js json日期格式转换日期方法
热门文章
- zoj 2165
- oracle 计算两个时间之间的月份差,相差几个星期,相差多少天
- Protel99se教程九:protel99se中PCB设计的高级应用
- BZOJ 1087 互不侵犯King (位运算)
- Android 4.4及以上系统下应用的状态栏颜色渐变效果的实现
- Flex 按钮添加图标
- Objective-c 类接口 (@interface) (类定义)
- c 输入两个数,第一个数决定一个nXn的矩阵,第二个数决定从1开始赋值,赋值的上限 (MD花了半天时间,思路不对害死人)
- 记载abp中Dbcontext的疑问
- 学习validate