前言
今天在给一个UIView添加背景图片的时候,其实完全可以用图片直接怼,简单方便便捷,我也喜欢这么弄,但是我想到时间还很充裕(就是UI那家伙没有给我图片,只能自己画),能不能使用系统的API画一个需要的图片呢,于是就查看了相关的资料,自己整理了一下。
iOS的的系统提供的有两套框架
1.UIBezierPath(贝赛尔曲线)
贝塞尔曲线其实就是Core Graphics的封装,用起来更加的顺手罢了,更容易理解含义
/**
从rect的参数的类型根据矩形画线
*/
+ (instancetype)bezierPathWithRect:(CGRect)rect;
/**
Oval(椭圆)内切矩形的正式椭圆 也可以是圆 前提rect的size的width和height相等
*/
+ (instancetype)bezierPathWithOvalInRect:(CGRect)rect;
/**
cornerRadius半径 矩形四个角圆弧画线
*/
+ (instancetype)bezierPathWithRoundedRect:(CGRect)rect cornerRadius:(CGFloat)cornerRadius;
/**
corners 某一个角画弧画线
typedef NS_OPTIONS(NSUInteger, UIRectCorner) {
UIRectCornerTopLeft = 1 << 0,
UIRectCornerTopRight = 1 << 1,
UIRectCornerBottomLeft = 1 << 2,
UIRectCornerBottomRight = 1 << 3,
UIRectCornerAllCorners = ~0UL
};
*/
+ (instancetype)bezierPathWithRoundedRect:(CGRect)rect byRoundingCorners:(UIRectCorner)corners cornerRadii:(CGSize)cornerRadii;
/**
center 圆心座标
radius 圆半径
startAngle 起始的弧度 当为零的时候,证明是从最右边开始的
系统自带了有弧度(M_PI表示半圆,M_PI_2就表示四分之一的圆)
endAngle 结束的弧度
clockwise 逆时针(NO) 还是顺时针(yes)
*/
+ (instancetype)bezierPathWithArcCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise;
/**
CGPathRef 一个路径信息的结构体(很少用到)
*/
typedef const struct CGPath *CGPathRef;
+ (instancetype)bezierPathWithCGPath:(CGPathRef)CGPath;
上面都是静态方法直接画线,那必然有实例方法来画线
/**
利用一个座标指定画图的初始座标
*/
- (void)moveToPoint:(CGPoint)point
/**
下一个座标与上一个座标连在一起(必须有初始座标 moveToPoint这个函数要先设置)
*/
- (void)addLineToPoint:(CGPoint)point;
/**
这个是三次的贝塞尔曲线 可以画出两个弧来
endPoint 终点座标
controlPoint1 第一个基准点
controlPoint2 第二个基准点
*/
- (void)addCurveToPoint:(CGPoint)endPoint controlPoint1:(CGPoint)controlPoint1 controlPoint2:(CGPoint)controlPoint2;
/**
这个是二次的贝塞尔曲线 可以画出一个弧来
endPoint 终点座标
controlPoint1 第一个基准点
*/
- (void)addQuadCurveToPoint:(CGPoint)endPoint controlPoint:(CGPoint)controlPoint;
/**
center 圆心座标
radius 圆半径
startAngle 起始的弧度 当为零的时候,证明是从最右边开始的
系统自带了有弧度(M_PI表示半圆,M_PI_2就表示四分之一的圆)
endAngle 结束的弧度
clockwise 逆时针(NO) 还是顺时针(yes)
*/
- (void)addArcWithCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise NS_AVAILABLE_IOS(4_0);
2.Core Graphics
这是一个基于C封装的底层的API的接口,由于更底层的,所以它的功能更强大,很多时候我们愿意使用他们。
这是一个获取一个带三角的圆角的uiimage的对象
// 上下文的就是相当于画板,就是布置画线所需要的环境
1.UIGraphicsBeginImageContextWithOptions(size, NO, 0) 第一个方法就是设置图片的上下文
2.UIGraphicsGetCurrentContext() 获取当前上下文的
3. CGContextMoveToPoint 设置画图的起始座标
4. CGContextAddLineToPoint 添加画图的座标 连接上一个座标
5. CGContextAddArc(contextRef, FONTW(13), FONTW(7.5), FONTW(7.5), M_PI, M_PI*1.5, 0); 画弧
6. CGContextClosePath(contextRef); 连接路径
7. [color setFill]; 画面的填充的颜色
8. UIGraphicsGetImageFromCurrentImageContext 获取当前的画板的图片的对象
9. UIGraphicsEndImageContext 结束图片的上下文本 恢复以前的环境
效果图如下
带三角的边框就是 其他的以后再介绍