私の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}} のような値が表示されます。