0
 UIGraphicsBeginImageContext(self.view.bounds.size);
        [currentStrokeImageView.image drawInRect:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
        CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
        CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeNormal);
        CGContextSetLineWidth(UIGraphicsGetCurrentContext(), dWidth);
        CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), r, g, b, 1.0f);
        CGContextBeginPath(UIGraphicsGetCurrentContext());
        CGContextMoveToPoint(UIGraphicsGetCurrentContext(), pointA.x, pointA.y);
        CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), pointB.x, pointB.y);
        CGContextStrokePath(UIGraphicsGetCurrentContext());
        currentStrokeImageView.image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();

何らかの理由で、これは iphone/ipod ではまったく遅延なく実行されますが、iPad では描画中に大幅な遅延が発生します。私が使用するコードは上記のとおりですが、これを修正するための提案はありますか?

4

1 に答える 1

3

これがとても遅い理由は、あなたがでそれをしているからですtouchesMoved:withEvent:。このメソッドは、タッチイベントを受信して​​いる間、何度も(明らかに)呼び出すことができます。グラフィックスコンテキストへの描画はリソースを大量に消費する操作になる可能性があるため、そこで行っているすべてのことを行わないことをお勧めします。可能な限り、実行しているレンダリングをtouchesBeginandtouchesEndメソッドに延期します。それが不可能な場合は、移動で特定のデルタに到達した後、たとえばすべての2.0fポイントでのみ、これらの操作を実行できます。

于 2011-09-30T22:28:48.680 に答える