- 締切済み
iPhoneアプリ とある質問です。
NSTimerの中のUIViewアニメーションが動きません。 NSTimerの中のアラームは動いているので、NSTimerは動いていると思うのですが。。。 3週間、思いつく限り色々と試したり、参考書見たり、ネットで調べたりしたのですが、お手上げです。 ヒントでもかまいませんので、アドバイスを頂けたら幸いです。 まず状況としては、 h.ファイルで、アニメーションで動かしたい、IBOutlet UIButton *mを宣言してあります。 次に、UISwitchのON,OFFでNSTimerが起動します。 musicClock = [NSTimer scheduledTimerWithTimeInterval:0.4 target:self selector:@selector(test:) userInfo:nil repeats:YES]; そして、NSTimerの中で、以下のようにプログラムしてあります。 条件にあてはまれば、音楽とアニメーションが画面上で動くことを意図しています。 -(void)test:(NSTimer*)timer{ musicDate = [datePicker date]; NSTimeInterval t = [musicDate timeIntervalSinceNow]; NSLog(@"NSTimeInterval:%f",t); //アラームの処理 if (t <=0.0 && t > -600.0){ if (!musicAlarm.playing) //アニメーションの定義開始 [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.4]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; int x = rand() % 320; int y = rand() % 480; m.center = CGPointMake(x, y); [musicAlarm play]; [UIView commitAnimations];
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- tahke
- ベストアンサー率33% (2/6)
どうも。 タイマーの外だと動くんですね。 という事は、アニメーションのプログラムは正しいのか。 だったら動きそうな気がしますが・・・ 昔タイマーの中でもアニメーションさせていたと思いますから・・・ あとは、if文に入っていないくらいしか・・・ 例えば、 NSLog(@"anime:%d,%d",m.center.x,m.center.y); を [musicAlarm play]; の前に入れてみて、ちゃんと表示されるか確かめてみるとか。
- tahke
- ベストアンサー率33% (2/6)
ぱっとみよくわかりませんが、 タイマーの外で //アニメーションの定義開始 [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.4]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; int x = rand() % 320; int y = rand() % 480; m.center = CGPointMake(x, y); [UIView commitAnimations]; だけ実行してうごきますか? あと、 if (!musicAlarm.playing) に中括弧がないので変な事にはなってそうですね。 とりあえず、気になったところはそんなところです。 がんばってくださいねー
補足
アドバイスありがとうございます。 確かに、中括弧がありませんでした!ご指摘ありがとうございます。 タイマーの外、- (void)viewDidLoadの中では、IBで設定した画像が動きます。 しかしながら、モーダルビューのUISwitchとUIDatePikerでアラームをセットすると同時に、あるNSTimerが動きだし、 そして、そのNSTimerの中のif文で定義した条件(アラームを鳴らすための時間差)にあてはまると、さらに音を鳴らすのと画像を動かすNSTimerが動き出すように プログラミングしているのですが、アニメーションしません。音はなるのですが。。。どうしてでしょうか。。。 すっと解決できないままです。 でも、本当にアドバイスありがとうございました。
補足
再びありがとうございます。 NSLog(@"anime:%f,%f",m.center.x,m.center.y);を入れてみたら、 anime:0.000000,0.00000と表示されました。これは、アニメーションさせるUIViewを認識していないのかなと思い(自分の判断です)、色々やっていて、たまたま原因を探る上で、IB上に試しにUILabelを置いてアニメーションさせてやろうと思い、そのままiPhoneで実行してみたら、 なぜか、UILabelが表示さされません。もともとあるUILabelは表示されるし。。。新規プロジェクトでも同じようなことを、 してみると表示されるのに、という感じで、謎が謎を呼ぶように深みにはまってきました(汗)(笑)。 一度、時間がかかっても新しいプロジェクトファイルでもう一度順を追ってプログラミングしてみようと思います。 度々のアドバイス本当にありがとうございます。