3

アプリケーションでマップビューを使用しているときに、MKMapKitデリゲートメソッド'mapView:regionDidChange'が呼び出されないことがあります。マップをドラッグしたときにのみ発生します。しかし、ズームインまたはズームアウトすると、完全に機能します。そのため、マップのドラッグ中にマップに新しい注釈を配置することに関連する問題が発生します。私はこのコードをmapView:regionDidChange:

int j=0;

-(void) mapView:(MKMapView *)mapsView regionDidChangeAnimated:(BOOL)animated{

    zoomLevel = self.mapView.region.span.latitudeDelta;

    if (![appDelegate internetConnected]){
        return;
    }

    if (appDelegate.isMapViewRegionChanged) {
        if (j==0) {
            j++;
            return;
        }else{
            j=0;
            appDelegate.isMapViewRegionChanged  = FALSE;
            return;
        }
    }
    [self callGetMapViewWithObject:nil];
}


/*
first boolean is to check Internet connection.

[appDelegate internetConnected]

Second condition is to return when we navigate from any view controller too map View controller.

appDelegate.isMapViewRegionChanged

Third is a method to place new annotations. 

[self callGetMapViewWithObject:nil]; 

*/

すべての条件とブール値を確認しましたが、コーディングがこのバグの理由ではありません。地域に関連している可能性があります変更方法。

したがって、マップでアプリを使用している間、20%の時間はIdealのように動作します(メソッドは呼び出されません)。

誰かがこれで私を助けることができますか?

前もって感謝します。

4

1 に答える 1

0

編集ランダムに壊れたので、関数を再度呼び出します(以下で言ったことを元に戻します)、余分な変更はありません...そして、ええと、動作します。コインを投げているような気分です。

サブクラス化された MKMapView があるため、これが発生しました。これをサブクラス化しているかどうかはわかりませんが、何らかの理由で Apple のスーパー関数です。super を呼び出しましたが、適切に傍受されず、その呼び出しをスキップしました。

[super scrollView] への単なる呼び出しである「オーバーライドされた」呼び出しを削除すると、正常に動作し始めました。

Apple のコードがそのように壊れている理由はわかりません (super を呼び出してもオーバーライドしないのと同じ効果はありません)。ただし、これらをサブクラス化していないことを確認してください。 Recognizer は、Map Views が touchesBegan/Moved などに応答しない理由について、非常に親切に答えてくれました: How to interrupt touches events on a MKMapView or UIWebView objects? .

これで問題が解決しない場合は、他のビューの上にビューがないこと、不適切なデリゲートがないこと、xib が配置されて接続されていること、通常のものがないことを確認してください。

于 2012-09-24T22:13:15.760 に答える