Мое приложение имеет UIScrollView с одним подпредставлением. Подвид - это расширенный UIView, который печатает страницу PDF для себя, используя слои в событии drawLayer.
Масштабирование с использованием встроенного сжатия прекрасно работает. setZoomScale также работает как положено.
Я боролся с функцией zoomToRect. Я нашел онлайн пример, который делает переменную zoomRect CGRect из данного CGPoint.
В функции touchesEnded, если было двойное касание, и они были полностью уменьшены, я хочу увеличить изображение PDFUIView, который я создал, как если бы они были в центре пальца, где они дважды касались.
Итак, предположим, что я передаю переменную UITouch своей функции, которая использует zoomToRect, если они дважды касаются.
Я начал со следующей функции, которую нашел на сайте яблок:
http://developer.apple.com/iphone/library/documentation/WindowsViews/Conceptual/UIScrollView_pg/ZoomZoom/ZoomZoom.html
Ниже приведена модифицированная версия для моего расширенного класса UIScrollView:
- (void)zoomToCenter:(float)scale withCenter:(CGPoint)center {
CGRect zoomRect;
zoomRect.size.height = self.frame.size.height / scale;
zoomRect.size.width = self.frame.size.width / scale;
zoomRect.origin.x = center.x - (zoomRect.size.width / 2.0);
zoomRect.origin.y = center.y - (zoomRect.size.height / 2.0);
//return zoomRect;
[self zoomToRect:zoomRect animated:YES];
}
Когда я делаю это, кажется, что UIScrollView масштабируется с использованием нижнего правого края zoomRect выше, а не центра.
Если я сделаю UIView таким, как этот
UIView *v = [[UIView alloc] initWithFrame:zoomRect];
[v setBackgroundColor:[UIView redColor]];
[self addSubview:v];
Красная коробка отображается с мертвой точкой касания в центре.
Обратите внимание: я пишу это с моего ПК, я вспоминаю, как возился с разделенной на две части на моем Mac, поэтому просто предположим, что это рисует прямоугольник с точкой касания в центре. Если бы UIView отклонился от центра, но увеличил масштаб до нужного места, все было бы хорошо.
Однако, что происходит, когда он преобразует zoomToRect, кажется, что он использует нижний правый угол от zoomRect в верхнем левом углу увеличенных результатов.
Кроме того, я заметил, что в зависимости от того, где я щелкаю UIScrollView, он привязывается к разным точкам. Похоже, что крест посередине посередине и как-то отражает точки, как будто где-то слева от середины - отрицательное отражение, а где-нибудь справа от середины - положительное отражение?
Это кажется сложным, разве не нужно просто увеличить масштаб прямоугольника, который был нарисован, когда UIView смог нарисовать?
Я использовал много исследований, чтобы выяснить, как создать PDF, который масштабируется с высоким качеством, поэтому я предполагаю, что использование CALayer может привести к отказу от системы координат? Но для UIScrollView он должен просто рассматривать его как представление с размерами 768x985.
Это что-то сложное, пожалуйста, предположите, что код для создания zoomRect все в порядке. Что-то более глубокое с CALayer в UIView, которое есть в UIScrollView ....