UIScrollView zoomToRect, не масштабирующий к данному, реагирует (созданный из UITouch CGPoint)

Мое приложение имеет UIScrollView с одним подпредставлением. Подпредставление является расширенным UIView, который печатает страницу PDF к себе слои использования в drawLayer событии.

Изменение масштаба использования созданного в зажимании работает отлично. setZoomScale также работает как ожидалось.

Я боролся с функцией zoomToRect. Я нашел пример онлайн, который делает переменную CGRect zoomRect из данного 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....

6
задан skaffman 30 April 2010 в 16:06
поделиться

1 ответ

У меня было что-то похожее, потому что я не настраивал значения center.x и center.y, также деля их по шкале (используя center.x / scale и center.y / scale). Может, я неправильно читаю ваш код.

0
ответ дан 9 December 2019 в 22:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: