1

iPhoneシミュレータの[ハードウェア]メニューから[シェイクジェスチャ]を選択すると、最初のレスポンダーは常に2つのシェイクイベントを受け取ります(その間に数ミリ秒あります)。

残念ながら、シミュレーターのこれら2つのイベントはUIScrollview、特定の位置にスクロールする必要があるという問題を引き起こします。これは、最初のイベントに対してのみ行われます。

だから私は次の2つの質問があります(それらは何らかの形で相互に関連しています)...

質問1

シミュレータが1つの「シェイクジェスチャ」に対して2つのシェイクイベントを生成するのはなぜですか?
注:これらの2つのイベントは、実際のデバイスでテストする場合には発生しません。実際のiPhoneを振ると、常に1つのイベントが発生します。

質問2

getの後続の2つの呼び出しが[myScrollView setContentOffset:CGPointMake(x,0) animated:YES];両方とも正しく実行されることを確認する方法はありますか?
注:興味深いと思うのは、通話に設定animated:すると問題なく機能することです。両方の通話が実行されます。残念ながら、これは私が取り組んでいるアプリのオプションではありません。NOsetContentOffset

ところで、問題は簡単に再現できます。setContentOffsetアニメーションでを2回呼び出しUIScrollviewて、最初に実行されたものだけを見つけます...

[myScrollView setContentOffset:CGPointMake(300,0) animated:YES]; //this one works
[myScrollView setContentOffset:CGPointMake(100,0) animated:YES]; //this one not

前もって感謝します!

最高、マーカス

4

1 に答える 1

0

これは、シェイクの定義に関係しています。シェイクと呼ばれるものは、シミュレーターが送信する動きの量とは異なる場合があります。たとえば、デバイスでのシェイクはいずれかの軸で大きな動きをしている可能性がありますが、シミュレーターでは 2 つの大きな動きである可能性があります。通常、複数のイベントが望ましくなく発生しないように、ある種のシェイク タイムアウトまたはその他のロジックを使用して、コードでこれを処理する必要があります。ユーザーが 1 回振るか、5 回続けて振るかはわからないため、ロジックは考えられるすべてのケースを処理できる必要があります。

于 2009-10-15T13:42:49.913 に答える