2012-12-31 5 views
17

地図上の現在の位置の脈動リングで青いボールを実装する方法を知りたいですが、マップビューはありません。地図上の青いボールのようなIOSアニメーションのパルスサークル

基本的には、ユーザーが画面に触れるたびに通常のUIView(または私のカスタム表示)で拍動するリングを持つ青いボールを持つ最良の方法を知りたいと思います。そのタッチは青いボールの中心です。

私は2つのアイデアを持っていますが、最初はできなかったアニメーションを実装できましたが、おそらく可能です。 2番目は、gifのような一連の画像を取得し、ユーザーが触れるたびに表示することができます。

どちらが最適ですか?または、より良い選択肢がありますか?

ありがとうございます。

答えて

44

はこれを試してください:あなたが好きなよう

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(200, 200, 100, 100)]; 
view.backgroundColor = [UIColor blueColor]; 
view.layer.cornerRadius = 50; 

[self.view addSubview:view]; 

CABasicAnimation *scaleAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; 
scaleAnimation.duration = 0.2; 
scaleAnimation.repeatCount = HUGE_VAL; 
scaleAnimation.autoreverses = YES; 
scaleAnimation.fromValue = [NSNumber numberWithFloat:1.2]; 
scaleAnimation.toValue = [NSNumber numberWithFloat:0.8]; 

[view.layer addAnimation:scaleAnimation forKey:@"scale"]; 

は効果を修正するために、パラメータを設定します。

編集:

あなたはQuartzCoreフレームワークを追加する必要があり、これが機能する<QuartzCore/QuartzCore.h>が含まれます。

+1

のためにこれを試すには、すべての私の問題を解決すること、ありがとうございました。 レイヤーがそのcornerRadiusプロパティを持っているのを知らなかった。 –

+0

どのように受け入れますか?) 申し訳ありませんが、ここで多くのことを尋ねたことはありません。人々が既に投稿した内容を検索しました。 –

+0

もう1つ、アークを完全に完成させたくない場合はどうすればよいですか? は0〜PIのようですか? CGContextAddArcでこれを行うことができましたが、境界線の幅を設定できません。 自分自身を見つけた=)、とにかくありがとう。 答え:CGContextSetLineWidth –

1

イメージシーケンスではなくプログラムでアニメーションを行う方が良い方法です(アップルのやり方もそうです)。これにはいくつかの利点がありますが、それ以上にパフォーマンスが優れています(画像シーケンスアニメーションは60FPSで動作する可能性は低いです!)。

多くの方法でこのアニメーションを実現できます。イメージエディタでリンググラフィックを作成し、保持するためにUIImageViewを作成するのが最も簡単です。ビューのスケール、アルファ、およびフレームのプロパティをアニメートするだけで(イメージビューでスケールされたイメージのサイズを変更することができます)脈動するアニメーションが無期限に繰り返されるように、UIViewアニメーションの繰り返しプロパティを設定できます。あなたの中心的な「青いボール」は別のUIImageViewを上に重ねて表示することができます。

UIViewアニメーションはかなり簡単ですし、Appleにはあなたのために多くのサンプルコードがあります。アニメーションブロック内にアニメーション化するプロパティとアニメーションパラメータ(継続時間、繰り返しなど)を囲むだけで、iOSが残りの処理を行います。 StackOverflowで 'UIView animation'を検索すると、たくさんの質問が表示されます。

16

SWIFT

let view:UIView = UIView(frame: CGRectMake(200, 200, 100, 100)) 
view.layer.cornerRadius = 50 
view.backgroundColor = UIColor.blueColor() 

self.view.addSubview(view) 

let scaleAnimation:CABasicAnimation = CABasicAnimation(keyPath: "transform.scale") 

scaleAnimation.duration = 0.5 
scaleAnimation.repeatCount = 30.0 
scaleAnimation.autoreverses = true 
scaleAnimation.fromValue = 1.2; 
scaleAnimation.toValue = 0.8; 

view.layer.addAnimation(scaleAnimation, forKey: "scale") 
+0

scaleAnimation.repeatCount = 30.0は30回の反復だけアニメーションを繰り返します。アニメーションを無期限に繰り返すには、scaleAnimation.repeatCount = HUGEを使用します。 – leafcutter

関連する問題