Quartz 2D学习(三)自定义圆角按钮
2015-10-31 22:35
501 查看
Quartz 2D学习(三)自定义圆角按钮
导语
Quartz 2D是一个二维图形绘制引擎,它支持iOS环境和Mac OS X环境,为开发者提供了很多方便,它在绘图上的功能十分强大,如基于路径的绘图、透明度、阴影、颜色管理、反锯齿、PDF文档生成等。Quartz 2D作为Core Graphics框架的一部分,其中的很多数据类型和方法都是以CG为前缀的。本篇内容将介绍自定义button的实现。
需要用到的知识有:drawRect:, CGPathAddArcToPoint()
一、初始工作
1.新建一个类继承自UIButton,命名为CXZButton。
CXZButton.h#import <UIKit/UIKit.h> @interface CXZButton : UIButton @property (nonatomic, strong) UIColor *defaultColor; @end
CXZButton.m
#import "CXZButton.h" @implementation CXZButton - (id)initWithCoder:(NSCoder *)aDecoder { if ((self = [super initWithCoder:aDecoder])) { //初始化 self.opaque = NO; self.backgroundColor = [UIColor clearColor]; [self setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; } return self; } - (void)drawRect:(CGRect)rect { CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetFillColorWithColor(context, self.defaultColor.CGColor); //画一个矩形 CGContextFillRect(context, self.bounds); } - (void) setDefaultColor:(UIColor *)defaultColor { //设置默认颜色 _defaultColor = defaultColor; [self setNeedsDisplay]; }
2.main.storyboard设置
添加一个Button,然后设置Contraints,并将Button的类设置为CXZButton如图
3.在ShowViewController.m中添加代码,运行查看结果
#import "ShowViewController.h" #import "Test.h" @interface ShowViewController () @property (weak, nonatomic) IBOutlet CXZButton *button; @end @implementation ShowViewController - (void)viewDidLoad { [super viewDidLoad]; self.button.defaultColor = [UIColor colorWithRed:105.0/255.0 green:179.0/255.0 blue:216.0/255.0 alpha:1.0]; } @end
我们可以得到一个直角的button。
二、绘制圆角矩形
我们已经可以画出一个直角矩形,只要在drawRect:中稍微修改代码就可以绘制出圆角矩形。#import "CXZButton.h" @implementation CXZButton - (id)initWithCoder:(NSCoder *)aDecoder { if ((self = [super initWithCoder:aDecoder])) { self.opaque = NO; self.backgroundColor = [UIColor clearColor]; [self setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; } return self; } - (void)drawRect:(CGRect)rect { CGContextRef context = UIGraphicsGetCurrentContext(); CGMutablePathRef path = [self creatRoundedRectForRect:rect radius:8.0]; CGContextSetFillColorWithColor(context, self.defaultColor.CGColor); CGContextAddPath(context, path); CGContextFillPath(context); } - (void) setDefaultColor:(UIColor *)defaultColor { _defaultColor = defaultColor; [self setNeedsDisplay]; } - (CGMutablePathRef)creatRoundedRectForRect:(CGRect)rect radius:(CGFloat)radius { //申请路径 CGMutablePathRef path = CGPathCreateMutable(); //将起始点移动到点0 CGPathMoveToPoint(path, NULL, CGRectGetMidX(rect), CGRectGetMinY(rect)); //绘制曲线1 CGPathAddArcToPoint(path, NULL, CGRectGetMaxX(rect), CGRectGetMinY(rect), CGRectGetMaxX(rect), CGRectGetMaxY(rect), radius); //绘制曲线2 CGPathAddArcToPoint(path, NULL, CGRectGetMaxX(rect), CGRectGetMaxY(rect), CGRectGetMinX(rect), CGRectGetMaxY(rect), radius); //绘制曲线3 CGPathAddArcToPoint(path, NULL, CGRectGetMinX(rect), CGRectGetMaxY(rect), CGRectGetMinX(rect), CGRectGetMinY(rect), radius); //绘制曲线4 CGPathAddArcToPoint(path, NULL, CGRectGetMinX(rect), CGRectGetMinY(rect), CGRectGetMaxX(rect), CGRectGetMinY(rect), radius); //闭合path,绘制直线5 CGPathCloseSubpath(path); return path; } @end
结果图,圆角按钮:
大功告成,哈哈!!!!!
三、CGContextAddArcToPoint
1.CGContextAddArcToPoint
void CGPathAddArcToPoint ( CGMutablePathRef _Nullable path, const CGAffineTransform * _Nullable m, CGFloat x1, CGFloat y1, CGFloat x2, CGFloat y2, CGFloat radius );
P1为path的起始点,这个弧线会以两条直线为切线,radius为半径画弧。
参考:
苹果官方文档
stackoverflow
raywenderlich
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 讲解iOS开发中基本的定位功能实现
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- IOS 改变键盘颜色代码
- 举例详解iOS开发过程中的沙盒机制与文件
- Android和IOS的浏览器中检测是否安装某个客户端的方法
- 分享一个iOS下实现基本绘画板功能的简单方法
- javascript实现阻止iOS APP中的链接打开Safari浏览器
- IOS开发第三方语音-微信语音