質問

私はそれをアニメーション化するためにシンプルなuisliderを設定しています:進捗状況:

[UIView animateWithDuration:songLength
         delay:0.0
       options:UIViewAnimationOptionRepeat|
         UIViewAnimationOptionAllowUserInteraction|
         UIViewAnimationOptionBeginFromCurrentState
       animations:^{
        [UIView setAnimationDuration:10.0];
        [myUISlider setValue:10.0];
       } completion:nil
   ];

  [UIView commitAnimations];

ユーザーがボタンを押すと、その場所でアニメーションを停止したいと思います。

値を把握するには、プレゼンテーションレイヤーを照会する必要があることを理解していますが、プレゼンテーションレイヤーはタイプのカレイヤーであり、Uisliderではありません。したがって、画面上のX/Y位置のように、レイヤープロパティがありますが、スライダー自体の値ではありません。

設計により、プレゼンテーションレイヤーがレイヤーの現在のすべてのアニメーションデータにアクセスできることは理にかなっていますが、コードでそれをどのように動作させるかはわかりません。

何か案は?

役に立ちましたか?

解決

あなたが同じ問題に対処している場合に備えて、私はこの問題を解決する1つの方法を見つけました。設計上、Uisliderのアニメーション親指を照会する明確な方法はありません。アニメーションクエリはレイヤーに対してうまく機能するため、1つの方法は、独自の背景を作成し、親指であるレイヤーをアニメーション化することです。

これを回避する方法は、NSTIMERクラスの使用です。 Progress Barをアニメーションに開始したいようになったら、0.1S間隔でNSTIMERを設定し、関数を呼び出して親指の位置を更新します。親指の前/後のアニメーション(左の部分が青く、まだ白くなっているものがまだ白)が自動的に世話されます。

これがコードです:

updateTimer = [NSTimer scheduledTimerWithTimeInterval:.01 target:self selector:@selector(updateCurrentTime) userInfo:p repeats:YES];

したがって、このメソッドの.01ごとに呼び出され、親指を再描画し、アニメーションを作成します。アニメーションブロックは必要ありません。

これはうまく機能し、結果に満足しています。私はパフォーマンスに関心があり、この実装がリソースを集中していることを測定します。上記の最初のオプションを使用するのは良い考えかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top