前言
今天在給一個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 結束圖片的上下文本 恢復以前的環境
效果圖如下
帶三角的邊框就是 其他的以後再介紹