Мое приложение имеет UIScrollView с одним подпредставлением. Подпредставление является расширенным UIView, который печатает страницу PDF к себе слои использования в drawLayer событии.
Изменение масштаба использования созданного в зажимании работает отлично. setZoomScale также работает как ожидалось.
Я боролся с функцией zoomToRect. Я нашел пример онлайн, который делает переменную CGRect zoomRect из данного CGPoint.
В функции touchesEnded, если был двойной выстрел и они полностью уменьшены, я хочу увеличить масштаб, к которому PDFUIView я создал, как будто они зажимали с центром повышения, где они дважды коснулись.
Поэтому предположите, что я передаю переменную UITouch своей функции, которая использует zoomToRect, если они дважды касаются.
Я запустил со следующей функции, которую я нашел на сайте яблок:
Следующее является измененной версией для расширенного класса моего 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....
У меня было что-то похожее, потому что я не настраивал значения center.x и center.y, также деля их по шкале (используя center.x / scale и center.y / scale). Может, я неправильно читаю ваш код.