2011-01-30 22 views
2

Appleのドキュメントは、この方法はできるだけ軽量であるべきだと伝えていますが、ここでは標準的な使い方は何ですか?注釈ピンをリセットしますか?MKMapviewデリゲートにmapView:regionWillChangeAnimated:を実装する必要がありますか?

マップビューで表示される地域 が 変更しようとしていることデリゲートに通知します。

-(ボイド)のMapView:(MKMapView *)のMapView regionWillChangeAnimated:

パラメータ

のMapView
可視領域 変更される地図ビューをアニメーション(BOOL)。 YES、新しい地域 への変更がアニメーションする場合


をアニメ化。 NOの場合、すぐに変更 が行われます。

現在表示されているマップ領域 が変更されたときに呼び出されます。スクロール中に メソッドを何度も呼び出すと、 のマップ位置への更新が報告されることがあります。 したがって、この メソッドの実装は、 のパフォーマンスに影響を与えないように、 と軽量である必要があります。

答えて

0

このデリゲートメソッドに問題が軽量」それを維持するなど、あなたがIF/THENまたはCASE/BREAK必要があります(「スクロール時には、この方法では、マップの位置への更新を報告して何度も呼び出される」されます")。

このメソッドを使用する必要はありませんが(必要ではありません)、何らかの機能(たとえば無価値ピンの削除など)を組み込む場合は、軽量にするためのコード例は:

- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated{ 
if(!animated){ 
//Instantaneous change, which means you probably did something code-wise, so you should have handled anything there, but you can do it here as well. 

} else { 
//User is most likely scrolling, so the best way to do things here is check if the new region is significantly (by whatever standard) away from the starting region 

CLLocationDistance *distance = [mapView.centerCoordinate distanceFromLocation:originalCoordinate]; 
if(distance > 1000){ 
//The map region was shifted by 1000 meters 
//Remove annotations outsides the view, or whatever 
//Most likely, instead of checking for a distance change, you might want to check for a change relative to the view size 
} 

} 

} 
+0

ああ、アノテーションビューでは位置が自動修正されません。 – quantumpotato

+0

ビューは行いますが、ピンはもちろんありません。私は単に外側のピンを外すことを意味しました。上記のコードは、地域が変わったときに具体的に何かを行う必要のある開発者のためのものです。人々が何を見ていたのかを記録したい場合はいいですね。 –

+0

いいですね。ありがとう! – quantumpotato

関連する問題