2

UICircularProgressViewを使用していて、好みに合わせて変更しました。初期化は明確ですが、とにかく投稿します:

UICircularProgressView *wheelProgress = [[UICircularProgressView alloc]initWithFrame:CGRectMake(someFrame)];

それから私は正しい進歩を設定していますCGFloat between 0-1

CGFloat progress = .3;   // example
[self.wheelProgress setProgress:progress];

これは問題なく動作し、見栄えもしますが、どういうわけかアニメーション化したいと思います。私はこれまでアニメーションを扱ったことがないので、最初のアプローチは次のようなものでした。

for(tempProgress =! progress){
  incrementing tempProgress
  setting tempProgres to progressView
}

もちろん、これは非常に醜く、他のすべての進行をブロックします。

私が達成したいのは、0からその最終値までの進行状況の線形アニメーションです。

私が見た:アニメーションチュートリアル

そして、このようなものを思いついた:

CGContextRef context = UIGraphicsGetCurrentContext();
[UIView beginAnimations:nil context:context];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
[UIView setAnimationDuration: 1];
wheelProgress.progress = (progress) ? progress : 0.0;
[UIView commitAnimations];

しかし、どういうわけかこれは機能しません。

ここで修正する必要があるアイデアはありますか?

事前に感謝しますセバスチャン

4

1 に答える 1

1

使用している進行状況ビューは、進行状況をアニメーション化可能なプロパティとして持つように設定されていません。そうすることは非常に複雑であり、それがあなたが探しているものであるかどうかはわかりません。

もしそうなら、あなたは次のことをする必要があると思います(私はこれを自分でやったことはありません、これは私が読んだドキュメントと本に基づいています):

  1. の代わりにCALayersを使用するようにビューを書き直しますdrawInContextdrawRect
  2. レイヤーprogressにプロパティを作成します(の@dynamic代わりに使用します)@synthesize
  3. actionForKey:レイヤーサブクラスをオーバーライドしCABasicAnimationて、キーのaを返します@"progress"

この例は、いくつかのSOの質問/回答にあります。ここここで、使用できる検索用語を開始するか、少なくとも慣れておく必要があります。これは、レイヤーを使用して円グラフにアニメーションスライスを描画するための優れたチュートリアルのように見えます。これは、UICircularProgressViewから開始するよりも目的に近い場合があります。

または、NSTimerを使用してこれを実装することもできます。NSTimerは、目的の値に達するまで、進行状況の値を1/60秒ごとに増やします。

于 2012-04-24T09:13:03.690 に答える