Когда я устанавливаю делегата встроенного UISWrollView в UIWebView, я теряю возможность ущипнуть для увеличения, как я могу вернуть его обратно? - PullRequest
0 голосов
/ 11 июля 2011

Я использую UIWebView для отображения PDF. Мне нужно отслеживать некоторые события UIScrollView, поэтому я устанавливаю встроенный UIScrollView следующим образом:

for(UIScrollView *s in webView.subviews) {

    s.delegate = self;

}

Но проблема в том, что когда я это делаю, я теряю возможность ущипнуть, чтобы увеличить (как раньше, потому что было установлено свойство Scale Pages to Fit в UIWebView). Как это случилось? Что я могу сделать, чтобы это исправить? Я пошел дальше и реализовал метод UIScrollView shouldZoom, но когда я возвращаю scrollView в качестве вида для увеличения, он масштабируется из угла, а не там, где находятся мои пальцы.

Кто-нибудь знает решение этой проблемы? Как мне установить делегат UIScrollView и при этом сохранить естественную возможность масштабирования?

Спасибо!

Ответы [ 2 ]

1 голос
/ 11 июля 2011

Вы возитесь с некоторыми UIWebView внутренностями. Это похоже на плохой взлом, но я думаю, что вы можете переслать все методы UIScrollViewDelegate обратно в UIWebView в дополнение к тому, что вам нужно.

Кроме того, UIWebView имеет много подпредставлений. Вы должны проверить и переопределить делегата только для UIScrollView.

for (UIView *subview in webViews.subviews) {
    if ([subview isKindOfClass:[UIScrollView class]]) {
        subview.delegate = self;
    }
}
0 голосов
/ 11 июля 2011

Либо обработайте следующие события в вашем делегате:

– viewForZoomingInScrollView:
– scrollViewWillBeginZooming:withView:
– scrollViewDidEndZooming:withView:atScale:
– scrollViewDidZoom:

или сохранить исходный делегат

origDelegate = s.delegate;
s.delegate = self;

и переадресация вызовов, например:

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
    return [origDelegate viewForZoomingInScrollView:scrollView]; 
} 
...