Моя структура 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.
Метод перерисовки и 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, я вижу такие значения: {{0, 0,299316}, {4688, 6630}}.