照例恋博,我們看下本文的學(xué)習(xí)大綱
在該篇文章中可以了解到知識點(diǎn)有以下
- UIBezierPath的概念
- UIBezierPath的基本使用方法
- UIBezierPath的繪制案例
UIBezierPath的概念
UIBezierPath這個(gè)類在UIKit中叁怪, 是Core Graphics框架關(guān)于path的一個(gè)封裝荷科,使用此類可以定義簡單的形狀裹驰,比如我們常用到,矩形,圓形,橢圓面睛,弧,或者不規(guī)則的多邊形尊搬。
UIBezierPath的基本使用方法
UIBezierPath對象是CGPathRef數(shù)據(jù)類型的封裝叁鉴。
關(guān)于CGPathRef不了解,可以閱讀上篇文章佛寿。
Quartz2D的詳解和使用path如果是基于矢量形狀的幌墓,都用直線或曲線去創(chuàng)建。
一般使用UIBezierPath都是在重寫view的drawRect方法這種情形冀泻。
UIBezierPath的繪制案例
1.繪制直線
-(void)drawTwoLine
{ // 創(chuàng)建路徑
UIBezierPath * path = [UIBezierPath bezierPath];
// 創(chuàng)建起點(diǎn)
[path moveToPoint:CGPointMake(10, 10)];
// 添加線段到終點(diǎn)
[path addLineToPoint:CGPointMake(90, 90)];
[path moveToPoint:CGPointMake(90, 10)];
[path addLineToPoint:CGPointMake(10, 90)];
path.lineWidth = 10.f;// 設(shè)置線寬
path.lineCapStyle = kCGLineCapSquare;// 設(shè)置線頭樣式
path.lineJoinStyle = kCGLineJoinBevel;// 設(shè)置交叉樣式
[path stroke];// 渲染
}
2.繪制扇形
-(void)drawFan
{
UIBezierPath * path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(40, 40) radius:30 startAngle:M_PI_2 endAngle:M_PI clockwise:YES];
// 繪制扇形時(shí)需要連接圓心
[path addLineToPoint:CGPointMake(40, 40)];
[[UIColor cyanColor] set];
[path fill]; // 填充
// [path addClip];
}[圖片上傳中...(圓角矩形.png-d73dcf-1516616860954-0)]
3.繪制圓角矩形
-(void)drawCornerRect
{
UIBezierPath * path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(10, 10, 150, 100) cornerRadius:20];
[path stroke];
}
4.繪制橢圓
-(void)drawOvalUI
{
UIBezierPath * path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(50,50, 50, 50)];
// [path stroke];
[[UIColor cyanColor] set];
[path fill];
}
5.繪制圓弧或圓形
-(void)drawArcUI
{
UIBezierPath * path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(40, 40) radius:30 startAngle:M_PI_2 endAngle:0 clockwise:YES];
// [path addLineToPoint:CGPointMake(40, 40)];
[[UIColor cyanColor] set];
[path stroke];// 描邊
// [path fill]; // 填充
}
6.繪制圖片
方式1
UIImage * image = [UIImage imageNamed:@"1"];
[image drawInRect:CGRectMake(20, 20, 100, 100)];// 按照frame顯示大小
方式二
UIImage * image = [UIImage imageNamed:@"1"];
[image drawAtPoint:CGPointMake(20, 20)]; // 以這個(gè)坐標(biāo)起點(diǎn)常侣,到view的邊緣
方式三
[圖片上傳中...(圖片3.png-dc1f9e-1516617025868-0)]
UIImage * image = [UIImage imageNamed:@"1"];
[image drawAsPatternInRect:CGRectMake(0, 0, 100, 100)];// 如果圖片比區(qū)域小,會進(jìn)行平鋪弹渔;如果圖片比區(qū)域大胳施,有多少繪制多少
8.繪制文字
繪制文字1
NSString * str = @"韓寒,這個(gè)世界的冒犯者肢专,還是和世界和解了舞肆。";
NSDictionary * dic = @{NSFontAttributeName:[UIFont systemFontOfSize:12.0],NSForegroundColorAttributeName:[UIColor grayColor],NSStrokeWidthAttributeName:@10};
// 繪制方式1
[str drawInRect:CGRectMake(0, 0, 120, 100) withAttributes:dic];
繪制文字2
NSString * str = @"韓寒您没,這個(gè)世界的冒犯者,還是和世界和解了胆绊。";
NSDictionary * dic = @{NSFontAttributeName:[UIFont systemFontOfSize:12.0],NSForegroundColorAttributeName:[UIColor grayColor],NSStrokeWidthAttributeName:@10};
// 繪制方式2
[str drawAtPoint:CGPointMake(0, 70) withAttributes:dic];
9.保存圖片
注意事項(xiàng):ios 8.0之后氨鹏,添加權(quán)限提示。
- (IBAction)saveImage:(id)sender {
// 開啟圖片context
UIGraphicsBeginImageContextWithOptions(self.myImage.bounds.size, NO, 0);
// 獲取圖片的范圍
[self.myImage drawViewHierarchyInRect:self.myImage.bounds afterScreenUpdates:YES];
// 從上下文context中獲取圖片
UIImage * image = UIGraphicsGetImageFromCurrentImageContext();
//結(jié)束context,記得關(guān)閉
UIGraphicsEndImageContext();
// 寫入相冊
UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
/*
This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSPhotoLibraryAddUsageDescription key with a string value explaining to the user how the app uses this data.
ios 8.0之后压状,添加權(quán)限提示
*/
}
//系統(tǒng)指定的保存后結(jié)束要執(zhí)行的方法
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo{
NSLog(@"保存成功");
}
貝塞爾曲線簡單應(yīng)用git地址
[end]
關(guān)于UIBezierPath的簡單使用到這里介紹結(jié)束仆抵。