gpt4 book ai didi

ios - WKWebView 缩放无法正常工作

转载 作者:行者123 更新时间:2023-12-01 16:23:17 33 4
gpt4 key购买 nike

我正在使用 XWalkView,它是 WKWebView 的子类,以编程方式作为 subview 添加到容器 View 中。我正在尝试缩放 WKWebView 的内容页面,但它第一次没有缩放。 WKWebView 随后会缩放内容页面,即当我捏缩放或双击缩放时,它会缩放 WKWebView 本身或容器 View (我的猜测),然后再次执行缩放手势,内容页面会被缩放(这是预期的行为)。

问题是如何在执行缩放手势时使 WKWebView 的内容页面缩放。

我符合UIScrollViewDelegate我的 ViewController.h 中的协议(protocol)如下:

@interface ViewController : UIViewController<UIScrollViewDelegate, WKNavigationDelegate, WKUIDelegate>

我在 viewDidLoad 中将委托(delegate)设置为 self如下:
xWalkView.scrollView.delegate = self;

viewDidLoad 中设置缩放比例如下:
xWalkView.scrollView.minimumZoomScale = 1;
xWalkView.scrollView.maximumZoomScale = 6;

& 实现 ViewController.m 中的协议(protocol)方法如下:
-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
if (shouldPageNotZoom) {
NSLog(@"viewForZoomingInScrollView YES");
return nil;
} else {
NSLog(@"viewForZoomingInScrollView NO");
return xWalkView.scrollView.subviews[0];
}
}

-(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale {

}

我正在使用 BOOL shouldPageNotZoom 并根据 URL 将其设置为 YES 或 NO,具体取决于是否需要缩放。在需要缩放的页面上,我可以看到在日志区域中打印的 else block ( NSLog(@"viewForZoomingInScrollView NO"); )的日志以及在不需要缩放的页面上,我可以看到 if block 的日志( NSLog(@"viewForZoomingInScrollView YES"); )。哪个正在工作。唯一的问题是内容页面不会缩放第一个缩放手势,而是缩放 WKWebView 或容器 View (我猜),但会缩放后续缩放手势。

经过一番观察我发现 ScrollView 索引 0 处的 subview 在第一次和后续时间被缩放(但内容页面在后续时间不是第一次缩放),它在 viewForZoomingInScrollView 中返回.应该是这样,&是。我通过将标签值分配给每个 View 并通过在 scrollViewDidEndZooming 中记录标签值来查看标签值来做到这一点。日志区方法如下:
-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
if (shouldPageNotZoom) {
NSLog(@"viewForZoomingInScrollView YES");
return nil;
} else {
NSLog(@"viewForZoomingInScrollView NO");
xWalkView.scrollView.tag = 20;
xWalkView.tag = 15;
xWalkView.scrollView.subviews[0].tag = 10;
_containerView.tag = 5;
return xWalkView.scrollView.subviews[0];
}
}

-(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale {
NSLog(@"tag %li", (long) view.tag);
}

给出以下日志:
2017-11-28 17:21:36.610753+0530 MyApp[4614:241659] tag 10 //Getting this 1st time of zooming
2017-11-28 17:21:59.369461+0530 MyApp[4614:241659] tag 10 //Getting this at subsequent zooms

我不知道我错过了什么。

如果需要任何澄清,请发表评论。

最佳答案

得到解决方案!第一次返回最后一个 subview 和 ScrollView 的第一个 subview 在后续放大 viewForZoomingInScrollView方法解决了问题,如下图:

-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
if (shouldPageNotZoom) {
NSLog(@"viewForZoomingInScrollView YES");
return nil;
} else {
NSLog(@"viewForZoomingInScrollView NO");
xWalkView.scrollView.tag = 20;
xWalkView.tag = 15;
xWalkView.scrollView.subviews[0].tag = 10;
_containerView.tag = 5;

if (isFirstTimeZooming) {
return xWalkView.scrollView.subviews[xWalkView.scrollView.subviews.count - 1];
} else {
return xWalkView.scrollView.subviews[0];
}
}
}

-(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale {
NSLog(@"tag %li", (long) view.tag);
isFirstTimeZooming = NO;
}
isFirstTimeZooming在加载 didStartProvisionalNavigation 中的页面时设置为 YES方法并在 scrollViewDidEndZooming 中设置为 NO方法,以便 ScrollView 的第一个 subview 可以在后续缩放中传递。

我不得不使用 isFirstTimeZooming因为如果我只在 viewForZoomingInScrollView 中通过最后一个 subview 缩放问题被逆转,即它第一次正确缩放,但在随后的缩放中没有。

关于ios - WKWebView 缩放无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47525342/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com