1

スライダーのセットがあり、値の変更を使用して数値を%インジケーターにフィードしています。また、この値を使用して、スライダーが特定のポイントを下回っているかどうかを確認しています。もしそうなら、私はUIViewAnimationを実行したいと思います(私はそうです、それはすべて正常に動作しています)。ただし、スライダーがしきい値を下回ると、アニメーションは常に呼び出されます。つまり、アニメーション化されているアイテムは、ポイントaからポイントbに移動し、その後何度も戻ります。それで、しきい値ポイントで一度だけアニメーションをトリガーできますか?

これが私の値をピクセルで取得する方法です:

_sizeSliderRange = _sizeSlider.frame.size.width - _sizeSlider.currentThumbImage.size.width;
_sizeSliderOrigin = _sizeSlider.frame.origin.x + (_sizeSlider.currentThumbImage.size.width / 4.0);
_sizeSliderValueToPixels = (_sizeSlider.value * _sizeSliderRange) + _sizeSliderOrigin;

そして、リンクされたValue Changed IBAction関数内で条件を使用して、値をチェックし、作業を行います。

if (_sizeThumbX < 85) {  //if within 60px of the left margin we animate the label to sit float left
    [UIView transitionWithView:_sizeLabel duration:0.25f options:UIViewAnimationCurveEaseInOut animations:^(void) { etc etc

ありがとう。

4

2 に答える 2

1

@Luisが言ったように、次のようなBOOLプロパティを使用するだけです。

if (_sizeThumbX < 85) {  //if within 60px of the left margin we animate the label to sit float left
    if (!self.passedBelowThreshold) {
        [UIView transitionWithView:_sizeLabel duration:0.25f options:UIViewAnimationCurveEaseInOut animations:^(void) { /* ... */ }
    }
}
self.passedBelowThreshold = _sizeThumbX < 85;
于 2012-05-28T09:30:25.017 に答える
1

コードは、スライダーの値が変更され、85未満になるたびに、アニメーションが呼び出されるロジックに従って機能します。アニメーションは、次の方法で1回だけトリガーできます:-

1>YOuはアニメーションが発生する絶対値を維持できます。_sizeThumbX == 85

2>または、値が何回変化するかを示すカウンターを持つことができます。別の関数でスライダーの変更の値をカウントして保存します。スライダーの値が85の範囲にある場合は、カウンター値を増やしないでください。アニメーション部分で、スライダーがまだ85の範囲を下回っている場合は、カウンターフラグとスライダーの現在の位置を確認してください。カウンター値がすでに1の場合、つまりアニメーションが既に起動されている場合はアニメーションを呼び出さないでください。それ以外の場合は、アニメーションカウンターを呼び出して増やします。

3>あなたが明確に言及していないので、私はあなたの状態に気づいていませんが、スライダーが範囲を超えて再び戻った場合、アニメーションをもう一度呼び出したいと思います。その場合、カウントをゼロにします(スライダーが指定された範囲を超えます) )。

于 2012-05-28T09:31:15.767 に答える