2

指で UIBezierPath を描画する UIView があります。ビューを再ズームすると (パスが描画された後など)、再描画関数がトリガーされ、BezierPath が再スケーリングされます。

- (void)redrawPathsWithScale:(float)scale
{
    [_path applyTransform:CGAffineTransformMakeScale(scale, scale)];
    [self setNeedsDisplay];
}

setNeedsDisplay呼び出される原因drawRectとなります。現在、x6 近くの絶対縮尺にズームインするたびに、すぐにメモリ警告が表示され、アプリがクラッシュします。

私のdrawRect方法は次のようになります。

- (void)drawRect:(CGRect)rect
{   
    [_path strokeWithBlendMode:kCGBlendModeNormal alpha:1.0];
}

興味深いのはdrawRect、まったく実装しないと、メモリ警告が削除されることです。empty を実装すると、drawRect依然としてクラッシュが発生します。

4

1 に答える 1

1

追加[super drawRect:rect];しても違いはありますか?

drawRect の Apple ドキュメントには次のように記載されています。

UIView を直接サブクラス化する場合、このメソッドの実装で super を呼び出す必要はありません。ただし、別のビュー クラスをサブクラス化する場合は、実装のある時点で super を呼び出す必要があります。

UIView をサブクラス化している場合は問題ありませんが、念のため確認する価値があるかもしれません。

于 2012-10-23T10:14:05.340 に答える