1

描画機能を実装しようとしています。現在、私は UIBezierPath を使用しています:

@interface DrawView : UIView {
    UIBezierPath *myPath;
}
@end

@implemenation DrawView

-(id)initWithFrame:(CGRect)frame {
    //...normal init code
    myPath = [[UIBezierPath alloc]init];
    myPath.lineCapStyle = kCGLineCapRound;
    myPath.lineJoinStyle = kCGLineJoinRound;
    myPath.miterLimit = 0;
    myPath.lineWidth = 10;
}

でstartPointtouchesBegan:を追跡し、[myPath moveToPoint:myTouch locationInView:self];touchesMoved:呼び出します[myPath addLineToPoint...]; [self setNeedsDisplay]

私の DrawView は UIScrollView のサブビューです。

私の問題:ズームインすると、図面が非常に角張ったりピクセル化されたりします。

見栄えが良く滑らかに見えるように描画を再描画したいのですが、どのように、またはどこから始めればよいかわかりません。

この簡単な「解決策」を見つけました:

-(void)scrollViewDidEndZooming:(UIScrollView*)scrollView withView:(UIView*)view atScale:(float)scale {
    view.layer.contentsScale = scale;
    [view setNeedsDisplay];
}

この方法でメソッドを実装すると、ズーム後の描画はスムーズになりますが、アプリは非常に遅くなります。maximumZoomScalescrollView の上限で、アプリは完全にクラッシュします。ドキュメントを正しく理解している場合、contentsScale を 2 より大きく設定することはお勧めできません。

4

2 に答える 2

0

優れたテクニックについては、WWDC 2012 のビデオ「2D グラフィックスとアニメーションのパフォーマンスを最適化する」をご覧ください。手に負えない場合は、透明なレイヤーを削減または削除し、可能であれば個々の線分を連結することをお勧めします。

于 2012-09-21T17:03:36.143 に答える