1

UIScrollView に MKMapView を追加しました。期待される機能は、マップをパンするとマップが移動することだと思いましたが、親の UIScrollView はスクロールしません。つまり、マップをパンしている場合、スクロールビューは現在の位置にとどまります。

これは私のコードです:

scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.width, self.height)];
    [scrollView setAutoresizingMask:UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth];
    [self.view addSubview:scrollView];

    double mapHeight = 200;
    if([AppDelegate isRunningOniPad])
        mapHeight = 400;

    map = [[MKMapView alloc] initWithFrame:CGRectMake(0, 200, self.width, mapHeight)];
    [map setExclusiveTouch:NO];
    [scrollView map];

エクスクルーシブタッチをYESとNOにしてみましたが、効果がないようです。

マップをパンすると UIScrollView の移動が停止するように、動作を機能させる方法はありますか? マップを MKMapView の代わりに UIScrollView に変更しようとしましたが、同じ動作をしたため、これが MKMapView 固有のものであるとは思えません。

4

2 に答える 2

1

期待される結果は正しいです。マップビューがタッチされたとき、スクロールビューは静止したままである必要があります。これは、タッチイベントがレスポンダーチェーンを介してスクロールビューに渡される前に、タッチイベントを受信するためです。

私は空のプロジェクトで上記のコードをすばやくテストしました。これは、フレームとサイズの作成、iPadサイズの検出、およびスクロールビューのサブビューとしてのマップの追加にいくつかの変更を加えて期待どおりに機能しています。

UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
[scrollView setAutoresizingMask:UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth];
// Make the content size large to allow scroll view to move
[scrollView setContentSize:CGSizeMake(1000, 2000)];
[self.view addSubview:scrollView];

double mapHeight = 200;
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    mapHeight = 400;
}

MKMapView *map = [[MKMapView alloc] initWithFrame:CGRectMake(0, 200, self.view.bounds.size.width, mapHeight)];
[map setExclusiveTouch:NO];
[scrollView addSubview:map];
于 2012-09-16T21:49:06.677 に答える
0

どなたかのお役に立てれば、

a に a を追加すると、期待どおりに動作MKMapViewするUIScrollViewはずです。私の状況では、ビュー階層が正しく設定されていなかったため、機能していませんでした。

問題がある場合は、サブビューを追加する方法を見てください (つまり、 がの階層に適切にある[self.view addSubview:mapView]ことを確認してください。MKMapViewUIScrollView

また、ビュー階層を検査するのが本当に好きです(そして、私はそれらに関連付けられていません;)

于 2014-04-09T19:29:03.627 に答える