7

私はUIPickerView複数のコンポーネントを持っています。一部の値はグレー表示されています。「February」を選択すると「30」から「28」に移動するpickerView:didSelectRow:inComponentのと同じように、問題のピッカー コンポーネントを最も近い有効な値にシフトすることでこれを尊重します。UIDatePicker次に、デリゲート メソッドを呼び出して、調整された値を通知します。

私の調整メソッドが my を呼び出すと、画面上UIPickerViewselectRow:inComponent:animated:YES値は正しいですが、からの値selectedRowInComponent:は (グレー値の調整前から) 古いものになります。ただし、 を呼び出すselectRow:inComponent:animated:NOと、返される値は正しいのですが、アニメーションがないのが不快です。

beginAnimations:調整を/commitAnimationsブロックでラップし、値を でキャッチしようとしましたUIView+animationDidStopSelector、まだ古い値が取得されます。誰もこれに遭遇したことがありますか?

問題は簡単に複製できます。

[picker selectRow:newValue inComponent:i+offset animated:YES];

retValue = [picker selectedRowInComponent:i+offset];

それをアニメートするのが YES の場合、retValue は 0 です (古いと呼びます)。NO に変更すると、retValue は newValue と同じになります。

4

1 に答える 1

1

私はこれに気づいていませんが、簡単なハックは、アニメーション化された操作を実行し、アニメーションが完了したら、アニメーションなしでもう一度実行することです。次に、からの結果はselectedRowInComponent正しいはずです。

ただし、テスト コードからは、正しい結果が返されているようです。ピッカーにアニメーション化された行を選択するように依頼すると、アニメーションが完了するまで新しい値は設定されないため、アニメーションを開始した直後に選択した行をすぐに要求する場合 (とにかく次の実行ループまで開始されません) )、古い結果が得られます。

とにかく、アニメーションの最後をどのくらい正確に捉えていますか?使用したコードを見せていただけますか?

もう 1 つの質問は、なぜこれをすぐに正しくする必要があるのか​​ということです。ピッカーを明示的に設定している場合、設定されている値が正確にわかっているのに、なぜ再度確認する必要があるのでしょうか?

于 2012-03-13T08:49:05.813 に答える