Quartz 2 D図面の概要
74522 ワード
Quartz 2 Dの概要使用概要描画画像座標系の平行移動、回転、スケール描画テキストPDFファイルの描画
一、Quartz 2 Dの概要
1⃣10.Quart2 DはCoreGraphicの一部であり、CベースのAPI
-グラフィックのコンテキスト(Graphics Context)
データ型、Quartz描画画像から出力装置への情報をカプセル化
-Quartz 2 D座標系
-描画順序
-描画方法
2⃣10.メモリ管理
Create、copy、retainが表示されたら、リリースする必要があります.
二、簡単に使う
-ビューに関連付けられたコンテキストを取得
-可変パスを作成します(デフォルトのパスがあります).
1.パスの作成
2.パスの開始点の設定
3.パスの内容を追加
-コンテキストへのパスの追加
-コンテキストステータスの設定
1.境界線の色を設定
2.塗りつぶし色の設定
3.線幅の設定
4.セグメント接続スタイルの設定
5.線分の先頭スタイルの設定
6.破線スタイルの設定
-描画パス
-パスの解放
三、画像を描く
線を引く
線を引く
長方形を描く
円を描く
グラデーション効果
四、テキストの描画
補足:UIFOnt
-[UIFont systemFontOfSize:30];
-[UIFont fontWithName:@“Marker Felt” size:30];
タイル画像の描画
五、座標系の平行移動、回転、スケーリング(実際には座標系に作用し、操作後に座標系を復元する)
六、透かしを追加した画像(使用するコンテキストが上と異なる)
-画像関連コンテキストの取得
-画像の描画
-透かし文字を書く
-画像コンテキストから現在の描画結果を取得し、画像を生成する
-コンテキストを閉じる
ファイルをアーカイブできる-パスを取得
七、模擬メモ線
八、PDFファイルの生成
一、Quartz 2 Dの概要
1⃣10.Quart2 DはCoreGraphicの一部であり、CベースのAPI
-グラフィックのコンテキスト(Graphics Context)
データ型、Quartz描画画像から出力装置への情報をカプセル化
-Quartz 2 D座標系
-描画順序
-描画方法
2⃣10.メモリ管理
Create、copy、retainが表示されたら、リリースする必要があります.
二、簡単に使う
-ビューに関連付けられたコンテキストを取得
-可変パスを作成します(デフォルトのパスがあります).
1.パスの作成
2.パスの開始点の設定
3.パスの内容を追加
-コンテキストへのパスの追加
-コンテキストステータスの設定
1.境界線の色を設定
2.塗りつぶし色の設定
3.線幅の設定
4.セグメント接続スタイルの設定
5.線分の先頭スタイルの設定
6.破線スタイルの設定
-描画パス
-パスの解放
三、画像を描く
線を引く
#pragma mark 1
- (void)drawLine1
{
// 1.
CGContextRef context = UIGraphicsGetCurrentContext();
// 2.
// 2.1
CGMutablePathRef path = CGPathCreateMutable();
// 2.2
CGPathMoveToPoint(path, NULL, 50, 50);
// 2.3 ...
CGPathAddLineToPoint(path, NULL, 50, 420);
CGPathAddLineToPoint(path, NULL, 270, 420);
CGPathAddLineToPoint(path, NULL, 270, 50);
// 2.4
CGPathCloseSubpath(path);
// 3.
CGContextAddPath(context, path);
// 4.
// 4.1
CGContextSetRGBStrokeColor(context, 1, 0, 0, 1);
// 4.2
CGContextSetRGBFillColor(context, 0, 0, 1, 1);
// 4.2
CGContextSetLineWidth(context, 10);
// 4.3
CGContextSetLineJoin(context, kCGLineJoinBevel);
// 4.4
CGContextSetLineCap(context, kCGLineCapSquare);
// 4.5
CGFloat lengths[] = {20, 100};
CGContextSetLineDash(context, 100, lengths, 2);
// 5.
CGContextDrawPath(context, kCGPathEOFill);
// 6. ( create,copy retain , !)
CGPathRelease(path);
}
線を引く
#pragma mark 2
- (void)drawLine2
{
// 1.
CGContextRef context = UIGraphicsGetCurrentContext();
// 2.
CGContextBeginPath(context);
// 2.1
CGContextMoveToPoint(context, 50, 50);
// 2.2 ……
CGContextAddLineToPoint(context, 100, 100);
CGContextAddLineToPoint(context, 150, 50);
// 3.
CGContextSaveGState(context);
// 4.
// 4.1
CGContextSetRGBStrokeColor(context, 1, 0, 0, 1);
// 4.2
CGContextSetLineWidth(context, 10);
// 4.4
CGContextSetLineJoin(context, kCGLineJoinBevel);
// 4.5
CGContextSetLineCap(context, kCGLineCapRound);
// 5.
// CGContextDrawPath(context, kCGPathFillStroke);
//
CGContextStrokePath(context);
// 6.
CGContextRestoreGState(context);
// 7.
CGContextSetRGBStrokeColor(context, 0, 0, 1, 1);
CGContextMoveToPoint(context, 50, 50);
CGContextAddLineToPoint(context, 100, 100);
CGContextAddLineToPoint(context, 150, 50);
CGContextStrokePath(context);
}
長方形を描く
#pragma mark 2
- (void)drawShapeRect2
{
CGContextRef context = UIGraphicsGetCurrentContext();
[[UIColor redColor]setFill];
[[UIColor darkGrayColor]setStroke];
CGContextFillRect(context, CGRectMake(50, 50, 100, 100));
CGContextStrokeRect(context, CGRectMake(50, 50, 100, 100));
}
#pragma mark 1
- (void)drawShapeRect1
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextAddRect(context, CGRectMake(50, 50, 100, 100));
CGContextFillPath(context);
}
円を描く
#pragma mark -
- (void)drawShapeArc
{
// 1.
CGContextRef context = UIGraphicsGetCurrentContext();
[[UIColor redColor]set];
// 2.
// 2.1
// 2.2
// 2.3
// 2.4 , , “ ”
CGContextAddArc(context, 160, 230, 100, M_PI, -M_PI_2, 0);
//
CGContextStrokePath(context);
}
#pragma mark -
- (void)drawShapeCircle
{
// 1.
CGContextRef context = UIGraphicsGetCurrentContext();
//
[[UIColor greenColor]setFill];
// 2.
CGContextAddEllipseInRect(context, CGRectMake(50, 50, 200, 200));
// 3.
CGContextFillPath(context);
}
グラデーション効果
#pragma mark -
- (void)drawGradient
{
// 1. CGGradientRef
CGGradientRef gradient;
// 2.
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
// 3.
// , r,g,b,
CGFloat components[8] = {1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0};
// 4.
//
//
CGFloat locations[2] = {0, 1};
// 5.
gradient = CGGradientCreateWithColorComponents(colorSpace, components, locations, 2);
// 6. , OC , , ,
UIBezierPath *path = [UIBezierPath bezierPathWithRect:CGRectMake(50, 50, 200, 200)];
// 7.
[path addClip];
// 8.
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextDrawLinearGradient(context, gradient, CGPointMake(50, 50), CGPointMake(200, 50), kCGGradientDrawsAfterEndLocation);
// 9.
CGColorSpaceRelease(colorSpace);
// 10.
CGGradientRelease(gradient);
}
四、テキストの描画
補足:UIFOnt
-[UIFont systemFontOfSize:30];
-[UIFont fontWithName:@“Marker Felt” size:30];
#pragma mark -
- (void)drawText
{
NSString *text = @"I Love you!I Love you!I Love you!I Love you!I Love you!I Love you!I Love you!I Love you!I Love you!";
NSLog(@"%@",[UIFont familyNames]);
// set ,
[[UIColor redColor]set];
UIFont *font = [UIFont fontWithName:@"Marker Felt" size:30];
[text drawAtPoint:CGPointMake(50, 50) withFont:font];
CGRect rect = CGRectMake(50, 200, 200, 200);
[[UIColor blueColor]set];
UIRectFill(rect);
[[UIColor redColor]set];
// 、 、
[text drawInRect:rect withFont:font lineBreakMode:NSLineBreakByWordWrapping alignment:NSTextAlignmentCenter];
}
タイル画像の描画
#pragma mark -
- (void)drawImage
{
UIImage *image = [UIImage imageNamed:@" 1.png"];
//
[image drawAtPoint:CGPointMake(50, 50)];
//
[image drawInRect:CGRectMake(0, 0, 320, 460)];
//
[image drawAsPatternInRect:CGRectMake(0, 0, 320, 460)];
}
五、座標系の平行移動、回転、スケーリング(実際には座標系に作用し、操作後に座標系を復元する)
#pragma mark -
- (void)drawAll
{
//
CGContextRef context = UIGraphicsGetCurrentContext();
//
CGContextSaveGState(context);
//
CGContextTranslateCTM(context, 50, 50);
[self drawShapeCircle];
//
CGContextRestoreGState(context);
//
CGContextSaveGState(context);
//
CGContextTranslateCTM(context, 100, 100);
//
CGContextRotateCTM(context, M_PI_4);
//
CGContextScaleCTM(context, 0.5, 0.5);
UIImage *image = [UIImage imageNamed:@" 1.png"];
//
[image drawAtPoint:CGPointMake(50, 50)];
//
CGContextRestoreGState(context);
}
六、透かしを追加した画像(使用するコンテキストが上と異なる)
-画像関連コンテキストの取得
-画像の描画
-透かし文字を書く
-画像コンテキストから現在の描画結果を取得し、画像を生成する
-コンテキストを閉じる
ファイルをアーカイブできる-パスを取得
#pragma mark
- (UIImage *)createImage
{
// 1.
// ,
UIGraphicsBeginImageContext(CGSizeMake(320, 200));
// 2.
UIImage *image = [UIImage imageNamed:@"NatGeo02.png"];
[image drawInRect:CGRectMake(0, 0, 320, 200)];
// 3.
NSString *text = @" ";
// [[UIColor whiteColor]set];
// UIColor
UIColor *color = [UIColor colorWithRed:1 green:1 blue:0 alpha:0.5];
[color set];
[text drawInRect:CGRectMake(0, 170, 300, 20) withFont:[UIFont systemFontOfSize:12] lineBreakMode:NSLineBreakByWordWrapping alignment:NSTextAlignmentRight];
// ,
UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
// 4.
UIGraphicsEndImageContext();
// 5. ,
// NSArray *documents = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
// NSString *path = [documents[0]stringByAppendingPathComponent:@"image.png"];
NSString *path = @"/Users/apple/Desktop/image.png";
NSData *imageData = UIImagePNGRepresentation(result);
[imageData writeToFile:path atomically:YES];
return result;
}
七、模擬メモ線
#pragma mark -
- (UIImage *)createBGImage
{
// 1.
UIGraphicsBeginImageContext(CGSizeMake(320, 30));
// 2.
CGRect rect = CGRectMake(0, 0, 320, 30);
[[UIColor yellowColor]set];
UIRectFill(rect);
// 3. ,2
CGRect rect2 = CGRectMake(0, 29, 320, 1);
[[UIColor brownColor]set];
UIRectFill(rect2);
// 4. context
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
// 5.
UIGraphicsEndImageContext();
// 6.
return image;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self.textView setBackgroundColor:[UIColor colorWithPatternImage:[self createBGImage]]];
}
八、PDFファイルの生成
#pragma mark - PDF
- (void)createPDFFile
{
// 1.
// 1)
// 2) , , 612 * 792 pdf
// 3) dict
UIGraphicsBeginPDFContextToFile(@"/Users/apple/Desktop/demo.pdf", CGRectZero, nil);
// 2.
// pdf ,
// PDF
// , 6
for (NSInteger i = 0; i < 6; i++) {
if (i % 2 == 0) {
UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, 612, 792), nil);
}
// UIImage
UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"NatGeo%02d.png", i + 1]];
//
[image drawAtPoint:CGPointMake(0, 400 * (i % 2))];
}
// 3.
UIGraphicsEndPDFContext();
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self createPDFFile];
}