質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Q&A

解決済

1回答

2234閲覧

Xcodeでアニメーションを連続して実行できません

ababab

総合スコア47

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

0グッド

0クリップ

投稿2015/11/13 07:08

Xcodeで、数字が増える度に更新された数が上下に動くアニメーションを作っています。

http://qiita.com/noppefoxwolf/items/32530bb5f011ac2c9c91
こちらのサイトを参考に作りましたが、
for文で0から100の数字を順にカウントすると、最初の0の次がfor文の最後の100になってしまい、
アニメーションが0→100の一回しか行われません。

ログとブレークポイントで確認すると、カウントはしっかり0から100まで1ずつ増加していて、
ループが終わった後に数字が更新されてアニメーションしています。

100回ループさせて順に数えたいのですが、どうしたら良いでしょうか?
よろしくお願いいたします。

Objective

1 2-(void) viewDidLoad{ 3 label = [[UILabel alloc] init]; 4 label.frame = CGRectMake(100, 190, 100, 50); 5 label.backgroundColor = [UIColor yellowColor]; 6 label.textColor = [UIColor blackColor]; 7 label.font = [UIFont fontWithName:@"AppleGothic" size:22]; 8 label.text = [NSString stringWithFormat:@"¥%d",count]; 9 [myView addSubview:label]; 10 11 for(count = 0;count < 100;count++){ 12 13 Anim = [CATransition animation]; 14 [Anim setType:kCATransitionMoveIn]; 15 [Anim setSubtype:kCATransitionFromBottom]; 16 [Anim setDuration:0.2f]; 17 [coinlabel.layer addAnimation:Anim forKey:nil]; 18 label.text = [NSString stringWithFormat:@"¥%d",count]; 19 } 20}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

連続でaddAnimation:Animしても、順番にアニメーションを実行してくれるわけではありません。100個のアニメーションが同時に動いているはずです。
また、アニメーションの話だけではなく、ラベルに設定しているテキストもループの中で0〜99に変化しているだけで、(アニメーションとは関係なく)ループから抜けるときには「99」になっています。

ということで、
アニメーションの実行アニメーション終了を待つ100になってなかったら次の数字へ
という風にすれば良いと思います。

アニメーションの終了検知は、delegateを設定してanimationDidStop:finished:で行います。
参考URL:CATransitionでトランジションエフェクトを実行する方法

で、適当に書き直してみました。

objectivec

1 2@interface ViewController () 3{ 4 NSInteger countNumber; 5} 6@end 7 8@implementation ViewController 9 10- (void)viewDidLoad { 11 : 12 ()for文は丸ごと削除して下さい 13 : 14} 15 16- (void)viewDidAppear:(BOOL)animated 17{ 18 [super viewDidAppear:animated]; 19 20 countNumber = 0; 21 [self animationDidStop:nil finished:YES];//一発目を呼び出す 22} 23 24- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag 25{ 26 if (countNumber < 100) 27 { 28 label.text = [NSString stringWithFormat:@"¥%d",countNumber]; 29 CATransition *a = [CATransition animation]; 30 a.delegate = self;//delegateの設定 31 [a setType:kCATransitionMoveIn]; 32 [a setSubtype:kCATransitionFromBottom]; 33 [a setDuration:0.2f]; 34 [/*coin*/label.layer addAnimation:a forKey:nil]; 35 countNumber++; 36 } 37}

Animcountは使ってません。

投稿2015/11/13 08:10

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ababab

2015/11/14 11:53

回答ありがとうございます。 同時に動いているとは知りませんでした.... 大変勉強になりました。無事解決しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問