我对UIWebView有一个非常奇怪的问题:
我的appdelegate中有一个函数,它打开一个UIWebView来显示我的隐私策略。该函数从两个不同的视图中被调用两次。一旦用户点击登录屏幕上的按钮,一次用户点击视图上的按钮,该视图位于谷歌地图视图的顶部。
当从登录视图调用该函数时,一切正常,但我可以,但是当从另一个视图调用该函数时,UIWebView会出现但不完整可操作(用于测试我加载google.com):
我无法滚动,我无法打开大部分链接,唯一响应触摸事件的元素标记在此图片中:
这是我的代码: 在我的appdelegate中,我有:
- (void)showPrivacy:(UIView *)view
{
overlay = [[UIView alloc] initWithFrame:view.frame];
overlay.backgroundColor = [UIColor blackColor];
overlay.alpha = 0;
[view addSubview:overlay];
privacyView = [[WPPrivacyView alloc] initWithFrame:CGRectMake(15, 40, view.frame.size.width-30, view.frame.size.height-75)];
privacyView.layer.shadowColor = [UIColor blackColor].CGColor;
privacyView.layer.shadowOffset = CGSizeMake(0, 1);
privacyView.layer.shadowOpacity = 0.75;
privacyView.layer.shadowRadius = 20.0f;
privacyView.userInteractionEnabled = YES;
privacyView.scrollView.scrollEnabled = YES;
privacyView.scrollView.bounces = NO;
privacyView.scalesPageToFit = YES;
[view addSubview:privacyView];
[UIView animateWithDuration:0.1 animations:^{
privacyView.alpha = 1;
}];
privacyView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.1, 0.1);
CAKeyframeAnimation *bounceAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"];
bounceAnimation.values = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:0.1],
[NSNumber numberWithFloat:1.1],
[NSNumber numberWithFloat:0.95],
[NSNumber numberWithFloat:1.0], nil
];
bounceAnimation.duration = 0.3;
bounceAnimation.removedOnCompletion = NO;
[privacyView.layer addAnimation:bounceAnimation forKey:@"bounce"];
privacyView.layer.transform = CATransform3DIdentity;
}
要隐藏我打电话的视图: - (无效)hidePrivacy { [UIView animateWithDuration:0.3动画:^ { privacyView.alpha = 0; privacyView.transform = CGAffineTransformScale(CGAffineTransformIdentity,0.1,0.1); 完成:^(BOOL完成){ [privacyView removeFromSuperview]; }]; } showPrivacy函数从登录视图和地图视图中调用,如下所示:
WPAppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];
[appDelegate showPrivacy:self.view];
那么为什么一切正常,当webview出现在登录视图中时,为什么我可以操作SOME元素而不是全部,当它出现在地图视图中时?
答案 0 :(得分:2)
因为您要将叠加视图添加为子视图。这意味着superview将参与用户交互,一些事件将被“窃取”或被阻止。特别是滚动,它使用手势识别器。
您可能想要更改设计,以便使用叠加层显示模态视图控制器。如果您希望背景为原始视图,则可以在呈现模式之前获取它的图像。