0

次のコードを使用して、フィンガー ペインティング タイプの演習用に永続的な DrawRect を作成しています。

シミュレーターで実行すると問題ありませんが、iPad で実行するとギザギザの線でカーブを回すのが遅くなります。最適化またはより良い方法の提案を手伝ってください。

前もって感謝します

 - (void)drawRect:(CGRect)rect
 {
 UIGraphicsPushContext(drawingContext);
 CGImageRef cgImage = CGBitmapContextCreateImage(drawingContext); 
 image = [[UIImage alloc] initWithCGImage:cgImage];

 if (draw) {
 CGContextSetLineWidth(drawingContext, (2.0 * size) );
 CGContextSetStrokeColorWithColor(drawingContext, color);
 CGContextSetLineCap(drawingContext,kCGLineCapRound);
 CGContextMoveToPoint(drawingContext,    lastPt.x - (31.0 / self.transform.a),  lastPt.y - (31.0 / self.transform.a)  );
 CGContextAddLineToPoint(drawingContext, currPt.x - (31.0 / self.transform.a),  currPt.y - (31.0 / self.transform.a)  );
 CGContextStrokePath(drawingContext);
 } else {
 //                     CGContextSetFillColorWithColor(drawingContext, [[UIColor redColor] CGColor]);
 //                     CGContextFillRect(drawingContext,    CGRectMake( currPt.x - (31.0 / self.transform.a) - 16.0 , currPt.y - (31.0 / self.transform.a) - 16.0 , 40.0 , 40.0) );
 CGContextClearRect(drawingContext, CGRectMake( currPt.x - (31.0 / self.transform.a) - 16.0 , currPt.y - (31.0 / self.transform.a) - 16.0 , 40.0 , 40.0) );
 }

 UIGraphicsPopContext();
 CGImageRelease(cgImage);
 NSLog(@"    %@   "  ,  rect);
 [image drawInRect: rect];

 lastPt = currPt;
 }
4

1 に答える 1

0

からの呼び出しを変更することがわかりました

[self setNeedsDisplay]

[self setNeedsDisplayInRect]

インストルメントに応じて 1fps から 52fps に変更

于 2012-07-01T00:34:13.407 に答える