Iphone 当我设置UIWebView的委托时';s内置的UIScrollView,我失去了通过捏缩来缩放的能力,如何才能将其取回?

Iphone 当我设置UIWebView的委托时';s内置的UIScrollView,我失去了通过捏缩来缩放的能力,如何才能将其取回?,iphone,uiwebview,uiscrollview,zooming,uiscrollviewdelegate,Iphone,Uiwebview,Uiscrollview,Zooming,Uiscrollviewdelegate,我正在使用UIWebView显示PDF。我需要跟踪一些UIScrollView事件,因此我将内置UIScrollView设置为: for(UIScrollView *s in webView.subviews) { s.delegate = self; } 但问题是,当我这样做时,我失去了收缩缩放的能力(就像我以前所做的那样,因为UIWebView的“缩放页面以适应”属性已设置)。这是怎么发生的?我能做些什么来修复它?我继续并实现了UIScrollView shouldZoom方法

我正在使用UIWebView显示PDF。我需要跟踪一些UIScrollView事件,因此我将内置UIScrollView设置为:

for(UIScrollView *s in webView.subviews) {

    s.delegate = self;

}
但问题是,当我这样做时,我失去了收缩缩放的能力(就像我以前所做的那样,因为UIWebView的“缩放页面以适应”属性已设置)。这是怎么发生的?我能做些什么来修复它?我继续并实现了UIScrollView shouldZoom方法,但是当我将scrollView作为要放大的视图传回时,它从角落开始缩放,而不是从手指所在的位置

有人知道这个问题的解决办法吗?如何设置UIScrollView代理,同时仍然保持自然缩放功能


谢谢

您正在处理一些
UIWebView
内部构件。这感觉像是一次糟糕的黑客攻击,但我认为除了做您需要做的任何事情之外,您还可以将所有
UIScrollViewDelegate
方法转发回UIWebView

另外,
UIWebView
有许多子视图。您应该仅为
UIScrollView
检查并重写委托

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

在代理中处理以下事件:

– viewForZoomingInScrollView:
– scrollViewWillBeginZooming:withView:
– scrollViewDidEndZooming:withView:atScale:
– scrollViewDidZoom:
或保存原始委托

origDelegate = s.delegate;
s.delegate = self;
并转发呼叫,例如:

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

这在很大程度上起了作用,但现在正在缩放的UIWebView在缩放时不会重新调整其显示。结果是,我放大的文本非常模糊,无法阅读。有什么想法吗?补充:它的行为就像我已经缩放了,但我没有举起手指,因为视图直到你正常停止后才重新聚焦。现在,它只是保持模糊…就像@Barum Rho所说的,你在搞乱UIWebView的内部结构。不知道在重新分配代理时,哪些关系/依赖关系受到干扰。我猜您正在重写的另一个委托方法的代码对您要完成的任务至关重要。@Stephen J.您解决了页面模糊的问题了吗?