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.破線スタイルの設定
-描画パス
-パスの解放
三、画像を描く
線を引く
#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];
}