0

私はこれについてしばらく壁に頭をぶつけてきましたが、これで終わりです。PhoneGap を使用してアプリを作成しています。下部に 5 つのタブを含むタブ バーがあり、1 つのタブは Google マップ (GitHub の古いプラグインの MapKit) を読み込みますが、問題は、マップ タブに移動した直後に別のタブに切り替えると、新しいタブがマップがまだそこにあるかのようにタッチ イベントを受け入れません。(地図は表示されません。方法は次のとおりです。

self.mapView.hidden = YES;
self.childView.hidden = YES;

ただし、これを行うと、[マップ] タブ -> [ホーム] タブ -> [通知] タブを選択すると、[通知] タブでタッチ イベントが機能します。

これを修正する方法は、PhoneGap が使用する UIWebview をどうにか前面に出すことだと思います。

私はもう試した:

[self.childView bringSubviewToFront:self.webView];

と:

[self.webView bringSubviewToFront:self.mapView];

また:

[self.viewController bringSubviewToFront:self.webView]

コードの最後の行で次のエラーが発生します。「UIViewController」は「bringSubviewToFront:」に応答しない可能性があり、何も起こりません。

Map の描画に使用されるコードは次のとおりです。

if (!self.mapView) 
{
    [self createView];
}

// defaults
CGFloat height = 480.0f;
CGFloat offsetTop = 0.0f;

if ([options objectForKey:@"height"]) 
{
    height=[[options objectForKey:@"height"] floatValue];
}
if ([options objectForKey:@"offsetTop"]) 
{
    offsetTop=[[options objectForKey:@"offsetTop"] floatValue];
}
if ([options objectForKey:@"buttonCallback"]) 
{
    self.buttonCallback=[[options objectForKey:@"buttonCallback"] description];
}

if ([options objectForKey:@"regionDidChangeCallback"]) 
{
    self.regionDidChangeCallback=[[options objectForKey:@"regionDidChangeCallback"] description];
}

CLLocationCoordinate2D centerCoord = { [[options objectForKey:@"lat"] floatValue] , [[options objectForKey:@"lon"] floatValue] };
CLLocationDistance diameter = [[options objectForKey:@"diameter"] floatValue];

CGRect webViewBounds = self.webView.bounds;

CGRect mapBounds;
mapBounds = CGRectMake(
                       webViewBounds.origin.x,
                       webViewBounds.origin.y + (offsetTop / 2),
                       webViewBounds.size.width,
                       webViewBounds.origin.y + height
                       );

[self.childView setFrame:mapBounds];
[self.mapView setFrame:mapBounds];

MKCoordinateRegion region=[ self.mapView regionThatFits: MKCoordinateRegionMakeWithDistance(centerCoord, 
                                                                                            diameter*(height / webViewBounds.size.width), 
                                                                                            diameter*(height / webViewBounds.size.width))];
[self.mapView setRegion:region animated:YES];

どんな助けでも大歓迎です。

4

1 に答える 1

1

UIViewController がそれに応答しないため、viewController オブジェクトでメソッド BringSubviewToFront: を呼び出すことはできません。次のように変更できます。

違う :

[self.viewController bringSubviewToFront:self.webView];

右 :

[self.viewController.view bringSubviewToFront:self.webView];

これはあなたに役立つと思います。

于 2012-06-27T06:25:23.723 に答える