2011-10-27 1 views
1

私は単純なコンパスを作っていますが、うまくいきますが、アニメーションがスムーズになる可能性があります。時には、サブパネルフレームレートのゲームと同様に、少し跳ね上がることがあります。よりスムーズにアニメーション化する方法はありますか?あなたが悪いのフレームレートでゲームを言及しているためCLLocationManagerの見出し更新のスムージング表示

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 

CLLocationManager* lm = [[CLLocationManager alloc] init]; 
self.locman = lm; 
self.locman.delegate = self; 
self.locman.headingFilter = 2; 
[self.locman startUpdatingHeading]; 
} 

- (void) locationManager:(CLLocationManager *)manager 
       didUpdateHeading:(CLHeading *)newHeading { 
CGFloat h = newHeading.magneticHeading; 
NSString* dir = @"N"; 
NSArray* cards = [NSArray arrayWithObjects: 
@"N", @"NE", @"E", @"SE", @"S", @"SW", @"W", @"NW", nil]; 
for (int i = 0; i < 8; i++) 
    if (h < 45.0/2.0 + 45*i) { 
     dir = [cards objectAtIndex: i]; break; 
    } 
needle.transform = CGAffineTransformMakeRotation(radianConst*-h); 
direction = dir; 
} 

答えて

3

ご質問は混乱して、私はその三つの問題のあなたが抱えている疑問につながる:

  • ここ

    は私のコードです実際にパフォーマンスの問題が発生しているメッセージ
    (この場合、最後の値のキャッシングと実際にビューを更新する必要があるかどうかを判断するための計算が順番に並んでいる可能性があります)

または

  • CoreLocationは実際には周囲に "ジャンプ" とお使いのディスプレイがビクビクに見えることをあなたにデータを送信している

または

  • あなたがいない正しくセットアップの暗黙的なアニメーションのための暗黙のアニメーションパラメータを使用すると、私はあなたの問題を推測しているtransformプロパティ

にしたいが、実際に私が記載されている秒1である必要があり、場所から場所へと「飛び降りる」コアロケーションから最新の情報を取得していることがわかります。

この問題には2つのアプローチがあります.1つはもう一方の前にあります(より簡単でもう一方は難しいため)。

最初に、移行時間をわずかに長くするか、少なくとも手動で設定して、それが何であるかを知っています。おそらく2秒ですか?

[CATransaction begin]; 
[CATransaction setValue:[NSNumber numberWithFloat:2.0f] 
       forKey:kCATransactionAnimationDuration]; 

needle.transform = CGAffineTransformMakeRotation(radianConst*-h); 

[CATransaction commit]; 

それに失敗する、あなたは、しかし、私は彼らが彼らのコア場所のビデオの一つで、既にこれをしなかったリンゴの開発者の言及を聞いたと信じて...といくつかアップしており、アルゴリズムを平滑化のいくつかの並べ替えを適用します。

+0

すばらしい答え!まさに私が探していたもの。ありがとう。 –

+0

ああ、素晴らしい!私が助けてくれるとうれしいです:) – Steve

+0

@Steve可能であれば、あなたの答えで言及したビデオを指してください、それについて私たちが見つけることができるように、より多くの情報を与えてください。 – Scar

関連する問題