私のUIView構造:私は"master"UIViewを持っています(実際にUIScrollViewは、ページネーションごとのスクロールのみを目的としています)。これのサブビューとして、"master"私は"pageView"(のサブクラスUIScrollView)を持っています。これUIScrollViewには任意のコンテンツ (UIImageView など) を含めることができます。に"master"は別のサブビューがあります: PaintView(UIView のサブクラス)。このビューで、指の動きを追跡して描画します。
構造は次のようになります。
[master.view addSubview: pageView];
[master.view addSubview: paintView];
ユーザーがいつズームインするか (pageView がこれを担当) を知っており、デリゲート/メソッド呼び出しを介してpaintView、ズーム アクション中にズームの変更に応じてフレームを変更します。ズーム後(scrollViewDidEndZooming:withView:atScale)、paintView のカスタム redraw メソッドを呼び出します。
メソッドと drawRect の再描画:
-(void)redrawForScale:(float)scale {
for (UIBezierPath *path in _pathArray) {
//TransformMakeScale...
}
[self setNeedsDisplay];
}
-(void)drawRect:(CGRect)rect {
for (UIBezierPath *path in _pathArray) {
[path strokeWithBlendMode:kCGBlendModeNormal alpha:1.0];
}
}
問題: ズームインすると、メモリ警告が表示され、アプリがクラッシュします。
Allocations プロファイラーでは、アプリが大量のメモリを所有していることがわかりますが、その理由はわかりません。'setNeedDisplay'メソッドの後に呼び出さないと'redrawForScale'、アプリはクラッシュしません。
drawRect で rect をログに記録すると、{{0, 0.299316}, {4688, 6630}} のような値が表示されます。