1


UIWebView に非常に奇妙な問題が
あります。appdelegate に、UIWebView を開いてプライバシー ポリシーを表示する機能があります。この関数は、2 つの異なるビューから 2 回呼び出されます。ユーザーがログイン画面のボタンをクリックした場合に 1 回、Google マップ ビューの上にあるビューのボタンをクリックした場合に 1 回。
関数がログインビューから呼び出されると、すべて正常に動作し、できますが、関数が他のビューから呼び出されると、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;
}

ビューを非表示にするには: - (void)hidePrivacy { [UIView animateWithDuration:0.3 animations:^{ privacyView.alpha = 0; privacyView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.1, 0.1); } 完了:^(BOOL 終了) { [privacyView removeFromSuperview]; }]; showPrivacy 関数は、次のようにログイン ビューとマップ ビューから呼び出されます。

WPAppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];
[appDelegate showPrivacy:self.view];

では、Web ビューがログイン ビューに表示されるときにすべてが正常に機能し、マップ ビューに表示されるときにすべてではなく一部の要素を操作できるのはなぜですか?

4

1 に答える 1

2

オーバーレイ ビューをサブビューとして追加しているためです。これは、スーパービューがユーザー インタラクションに関与し、一部のイベントが「盗まれた」またはブロックされることを意味します。特に、ジェスチャ認識機能を使用するスクロール。

オーバーレイでモーダル ビュー コントローラーを表示するように、デザインを変更することができます。背景を元のビューにしたい場合は、モーダルを表示する前にその画像を取得できます。

于 2013-07-28T10:47:14.800 に答える