0

iPhone の画面に十字線があり、その下にパビリオン (地図上の点) が移動すると、地図のズームを開始したいと考えています。パビリオンが十字線の下に来て、それがもうその下にない瞬間に、検出が機能するように準備が整いました。

今のところ、ここに疑似コードで投稿します。

- (void) checkForPavilionUnderCrosshair {

   if(new pavilion under crosshair) {
     // start zooming
   }
   else if(just left pavilion under crosshair){
     // stop zooming
   }
}

だから私が今する必要があるのは、トリガーし続けることです:

mapView setZoom:(mapView.zoom+0.1) animated:NO];

そして、十字線がパビリオンから外れると、その進行を止めることができます。

私はstackoverflowでいくつかの検索を行いましたが、見つけた投稿には、たとえば停止が含まれていませんでした。私はプログラムでタイミングを計った経験がないので、探しているものを誰かが教えてくれませんか?

[self performSelector:@selector(zoomTest) withObject:self afterDelay:0.0]; を試しました。

マップに触れ続けて指を動かすと、checkForPavilionUnderCrosshair が思い通りに維持されます。しかし、画面に触れるのをやめると実行セレクターが起動するため、画面に20秒間触れると、20秒遅れて起動します。

そのための回避策はありますか?

4

1 に答える 1

2

メソッドの最後に を呼び出し[self performSelector:@selector(checkForPavilionUnderCrosshair) withObject:nil afterDelay:1.0]て、指定した時間の経過後に再度呼び出すことができます。遅延は秒単位であることに注意してください。

より高度なものが必要な場合はNSTimerApple docsを参照するか、例と説明についてこの SO の質問を参照してください。

単純なメソッドを使用することにした場合はperformSelector、もう繰り返したくないときにメソッドを呼び出すことはできません。を使用する場合は、タイマーをNSTimer呼び出して停止します。invalidate

于 2013-05-11T12:25:09.897 に答える