2012-04-13 15 views
4

私はビュー内の色にこのコードを持っている:IOS:ビューの画像を描画

UITouch *touch = [touches anyObject]; 
    CGPoint currentPoint = [touch locationInView:drawImage]; 

    UIGraphicsBeginImageContext(drawImage.frame.size); 
    [drawImage.image drawInRect:CGRectMake(0, 0, drawImage.frame.size.width, drawImage.frame.size.height)]; 
    CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); 
    CGContextSetLineWidth(UIGraphicsGetCurrentContext(), size); 

     CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), r, g, b, a); 

    CGContextBeginPath(UIGraphicsGetCurrentContext()); 
    CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y); 
    CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y); 
    CGContextStrokePath(UIGraphicsGetCurrentContext()); 
    drawImage.image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

は私の問題は、私はポイントではない色にしたいということですが、私がその特定の画像を使用したいです繰り返し(png画像として) 可能ですか?

+0

self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@ "image.png"]]; – Hanuman

+0

あなたはどうか説明できますか? – CrazyDev

答えて

2

あなたは、Appleのサンプルコードで開始することができます:それは、単一のUIImageをロードし、それを描くのは簡単だSample code:GLPaint

8

UIImage *brushImage = [UIImage imageNamed:@"brush.png"]; 
[brushImage drawAtPoint:CGPointMake(currentPoint.x-brushImage.size.width/2, currentPoint.y-brushImage.size.height/2)]; 

これは一度だけ、サイクルあたりの画像ではなく、連続線を描画します。ブラシ画像の実線が必要な場合は、Objective C: Using UIImage for Strokingを参照してください。

これは、このメソッドが呼び出されるたびに画像ファイルの読み込みが遅くなる可能性があります。 [UIImage imageNamed:]の結果はしばしばキャッシュされますが、後で再利用できるようにブラシを保存することで上記のコードを改善できます。

パフォーマンスに関しては、古いデバイスでこれをテストしてください。書いたように、それは私の第二世代のiPod touchで機能しましたが、追加があれば、第2世代および第3世代のデバイスではそれを吃音にする可能性があります。 @Armaanが推奨するAppleのGLPaintの例では、高速描画のためにOpenGLを使用していますが、より多くのコードが含まれています。

また、あなたはその後、おそらくUIImageViewdrawImageにその内容を描画することを考慮して、あなたの相互作用(touchesBegan:touchesMoved:touchesEnded:を)やっているように見えます。ペインティングイメージを保存し、このビューのレイヤーの内容をそのイメージに設定することは可能です。これによりパフォーマンスは変わりませんが、コードはより洗練されたものになります。 drawImageを引き続き使用する場合は、ivarを使用してpropertyにアクセスしてください。

+2

+ 1.Nice説明。 – Iducool