当我设置UIWebView的内置UIScrollView的委托时,我失去了缩放缩放的能力,我该如何取回它?

时间:2011-07-10 21:52:21

标签: iphone uiwebview uiscrollview zoom uiscrollviewdelegate

我正在使用UIWebView来显示PDF。我需要跟踪一些UIScrollView事件,所以我像这样设置内置的UIScrollView:

for(UIScrollView *s in webView.subviews) {

    s.delegate = self;

}

但问题是,当我这样做时,我失去了缩放缩放的能力(就像我之前所做的那样,因为设置了UIWebView的Scale Pages to Fit属性)。怎么会发生这种情况?我该怎么办才能修复它?我继续实现了UIScrollView的shouldZoom方法,但是当我将scrollView作为视图传回来进行放大时,它会从角落放大,而不是放在我手指的位置。

有人知道这个问题的解决方案吗?如何设置UIScrollView委托,并保持自然缩放功能?

谢谢!

2 个答案:

答案 0 :(得分:1)

你正在搞乱一些UIWebView内部。这感觉就像一个糟糕的黑客,但我认为你可以将所有UIScrollViewDelegate方法转发回UIWebView,除了做你需要做的任何事情。

此外,UIWebView有很多子视图。您应该仅为UIScrollView检查并覆盖委托。

for (UIView *subview in webViews.subviews) {
    if ([subview isKindOfClass:[UIScrollView class]]) {
        subview.delegate = self;
    }
}

答案 1 :(得分:0)

在您的代理中处理以下事件:

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

或保存原始代表

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

转发电话,例如:

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