• 締切済み

iPhoneSDKのNSTimerについて

はじめまして、keeperです。 この度はiPhoneSDKのアプリ開発のNSTimerについてお聞きしたい事があります。 キャラクター1の画像を表示させ、NSTimerを使い一定の時間間隔で画像をキャラクター1からキャラクター2に変更したいのですが、呼び出すメソッドがわかりません。 どなたかご教授いただければ幸いです。 -(void)move:(NSTimer *)timer { [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:1]; **ここの部分になんと命令すればよろしいでしょうか?** [UIView commitAnimations]; } どうか、よろしくお願い致します。

みんなの回答

  • harawo
  • ベストアンサー率58% (3742/6450)
回答No.1

根本から、勘違いなさっているようです。 NSTimerと、UIViewの「Animating Views」をごっちゃにしてはいけません。べつべつのものとして捉えてください。 NSTimder Class Reference http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSTimer_Class/Reference/NSTimer.html NSTimerの使用方法はこちら。 Timder Programing Topics http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Timers/Timers.html%23//apple_ref/doc/uid/10000061i あなたの意図によっては、マルチスレッドの処理が必要かもしれません。 Threading Programing Guide http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Multithreading/Introduction/Introduction.html%23//apple_ref/doc/uid/10000057i UIViewのアニメーション処理はこちら。 View Programing Guide for iOS - Animations http://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/AnimatingViews/AnimatingViews.html%23//apple_ref/doc/uid/TP40009503-CH6-SW1

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 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];

  • setAnimationDidStopSelectorについて教えてく

    setAnimationDidStopSelectorについて教えてください(iPhone SDK) 以下のようなコードを組んでいるのですが、setAnimationDidStopSelectorで指定したendDropPartメソッドの中で、どうやってアニメーションさせるオブジェクトを指定するか悩んでいます。iPhone SDKは初心者です。どなたかご教授いただけないでしょうか? -(void)endDropPart{ /* [下のメソッドのrrecieverが指すボタン setAlpha:1.0f]; */ NSLog(@"endAnim"); } - (void)DropPart:(UIButton *)reciever { [player play]; CGFloat y = [reciever center].y; [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.5f]; [UIView setAnimationDelegate:self]; [UIView setAnimationDidStopSelector:@selector(endDropPart)]; [reciever setCenter:CGPointMake([reciever center].x, y+150)]; [reciever setAlpha:0.0f]; [UIView commitAnimations]; }

  • objective c 1文字ずつ表示

    調べてみたところ、NSTimerと言う関数を見つけて 0.05fずつ反応する媒体が出来ました。 -(id)init{ timer = [NSTimer scheduledTimerWithTimeInterval:0.05f target:self selector:@selector(timetime:) userInfo:nil repeats:YES ]; return self; } -(void)timetime:(NSTimer *)time{i++; NSLog(@"この機能を利用してノベル風テキスト出力をしたいです"); } コレを利用してノベルゲーム風に1文字ずつ表示したいのですが、 何か方法はありませんか?

  • Objective-C,NSTimerを使って1秒毎に10秒かかる処理

    Objective-C,NSTimerを使って1秒毎に10秒かかる処理を実行させる事ってできますか? 例えば、以下に書いたとすると、(行頭全角スペースです。) @interface testTimer : NSObject {  NSTimer *timer; } @end @implementation testTimer - (id) init { timer = [NSTimer scheduledTimerWithTimeInterval:1.0  target: self  selector:@selector(timeUpdate:)  userInfo:nil  repeats:YES]; } - (void) timeUpdate:(id)sender {  NSLog(@"%@",[NSDate date]);   [NSThread sleepUntilDate:[[NSDate date] addTimeInterval:10.0]]; } @end 毎秒タイムスタンプは出力されませんでした。 以上、ご指導の程、よろしくお願いいたします。

  • 実行時引数をrun()メソッドに渡すには?

    初めまして。宜しくお願いします。 Javaの初心者で現在勉強中で、一定時間ごとに命令を走らせるプログラムを作ろうとしており、様々なサイトや本を参考にした結果、Timerクラス、TimerTaskクラスを使うと良さそうという事がわかりました。 一定周期毎に標準出力するのみのプログラムなら出来たのですが、実行時引数を一定周期毎に標準出力するプログラム作成時に躓いてしまいました。 望む挙動: $ java test1 abcdef とターミナルに入力して、一定周期毎に、"abcdef"が表示し続ける挙動。 躓いている点: main()メソッドからrun()メソッドに実行時引数(この場合、String st = String new args[0];)を渡そうと試みてる点。 -----------------ソースコード--------------------- import java.util.Timer; import java.util.TimerTask; public class test1 { public static void main(String args[]) throws Exception{ String st = new String(args[0]); Timer timer = new Timer(); timer.schedule(new TestTimer(), 0, 1000); } /** * 指定間隔置きに呼ばれる処理 */ static class TestTimer extends TimerTask{ public void run(){ System.out.println(st); // System.out.println("Hello, World!"); } } } ---------------------------------------------- 宜しくお願いします。

    • ベストアンサー
    • Java
  • Objective-C ボタンを動かすには

    Objective-Cはまったくの初心者で、iPhone用のアプリを作るのに書籍を見ながらサンプルをいじっています。 画像をタップしたらその画像自体が動くようなものを作りたいのですが、 RoundRectButtonを1個だけ配置して 【imageTestViewContollorer.h】 @interface imageTest1ViewController : UIViewController { IBOutlet UIButton *myButton; } -(IBAction)tapBtn; @end 【imageTestViewContollorer.m】 @implementation imageTestViewController -(IBAction)tapBtn{ myButton.center=CGPointMake(50,50); [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:2]; myButton.center=CGPointMake(160, 240); [UIView commitAnimations]; } としてみましたが、コンパイルエラーなどはありませんでしたが、ボタンを押しても何も起こりませんでした。 IBOutlet UIButtonが臭いような気もしているのですが、UIImageViewにするとRoundRectButtonと線を繋げなくなりますし、どう直してよいか見当もつかず困っています。 画像がタップされたら動く、みたいなものをそもそもRoundRectButtonに画像を割り当てた方がいいのかImageViewにタップされた場合の処理を割り当てた方がいいのかどうかもよくわかりません。 よろしくお願いいたします。

  • UIImageView使用時のメモリ枯渇について

    現在、パラパラ漫画を制作しているXcode初心者のものです。 初歩的な質問とは思いますが、いろいろと調べても自分で解決することが出来ず困っております。 どうぞご教授下さいますようお願い申し上げます。 本がめくれるように見せるため、ViewControllerにViewを設置し、そのViewの中にUiImageを配置して画像をUiImageに読み込むように制作しております。 また、Viewの部分をUIViewAnimationTransitionCurlUpによってページがめくれるようにしております。 画像は、事前にAllPagesという配列に読み込んでおります。 self.AllPages=[NSMutableArray array]; for (int i=1; i<=TotalPageAmount; i++) { UIImage *image=[UIImage imageNamed:[NSString stringWithFormat:@"%@_%d",PrePageName,i]]; [AllPages addObject:image]; } 具体的な処理のソースと致しましては、以下の処理をタイマーによって呼び出して処理を行っております。 —————————————————————————————————————- [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDelegate:self]; [UIView setAnimationDuration:0.2]; [UIView setAnimationTransition:transition forView:self.ViewController cache:NO]; PageIndex++; self.UiImage.image = [self.AllPages objectAtIndex:PageIndex]; [UIView commitAnimations]; —————————————————————————————————————- メニューよりパラパラ漫画を数種類選べるようにしており、各漫画が200ページ(1枚の画像サイズは40kb程度)です。 これを実行すると、見れば見るほどメモリが使用されてしまいます。一度読み込んだものは、破棄されずそのままメモリに残っているように思われます。そのため、そのうちメモリワーニングが出てきてアプリが落ちてしまうという現象が起こっております。 ご教授いただくのに情報が不足している場合もあるかと存じますが、 どうぞ、ご指導くださいますようよろしくお願い申し上げます。

  • Borland C++ Builder

    void __fastcall TForm1::Timer1Timer(Object* Sender) { a=?; b=?; c=?; for (int y= 1; y<4; ++y){   char z[3][1]; z[1][1]='a'; z[2][1]='b'; z[3][1]='c'; Form1->Image1->Picture->Bitmap->LoadFromResorceName((int)HInstance,"z[y][1]"); } } Image1にa→b→cと一秒間隔で順番に画像を出力したいのです。 ?の部分に画像イメージを割り当ててforでまわせばいいと思ったのですがどう記述すれば割り当てられるのかが分かりません。 それと、この書き方でImage1に順番に出力できるのでしょうか。教えてください。

  • Open CVによる動画保存について

    現在,Open CVを使用して,webカメラからから取得した映像を動画として保存しようとしています。 公式サイトや参考書のコードを丸写ししテストしています。 コンソールアプリケーションで作成した場合は,問題なく動画を保存できましたが,フォームアプリケーションで作成した場合,エラーで停止してしまいます。 動作としては,timerを使用して,30msec間隔でカメラから画像を取得し,動画として保存というものです。 CvCapture *capture;//画像 CvVideoWriter* rec; IplImage *srcImage; private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { timer1->Interval=30; timer1->Enabled=true; capture = cvCaptureFromCAM(0); srcImage = cvQueryFrame(capture); rec = cvCreateVideoWriter("movie.avi",CV_FOURCC('M','J','P','G'),30,cvSize(100,100)); } private: System::Void timer1_Tick() {    captureImage(); } private:System::Void captureImage(void){ cvFlip(srcImage,srcImage,0); srcImage=cvQueryFrame(capture); cvWriteFrame(rec,srcImage); } 上記の, cvWriteFrame(rec,srcImage); の箇所で停止してしまいます。 ビルドは成功しているのですが,実行時の1目でエラーになります。 エラー内容『保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。』 どなたか原因がわかるかたがいらっしゃいましたら,ご教授いただけますでしょうか?

  • iphoneでTableViewに動的追加できない

    UITableViewでWebから取得した情報を表示したく、非同期にCellを追加する テストアプリを書いていたのですが、わからない点がいくつかあります。 以下は非同期追加のテストコードで、実行するとリストに"foo"が一件だけ表示され 2秒おきにリストに”bar”が追加されます。 @interface AddRowTableViewController : UITableViewController { NSMutableArray *dataSouce; } -(void)onTimer:(NSTimer*)timer; @end @implementation AddRowTableViewController - (void)viewDidLoad { // 初期値は空欄 dataSouce = [[NSMutableArray alloc] init]; // (1) // 初期値としてfooを持つ //dataSouce = [[NSMutableArray alloc] initWithObjects:@"foo", nil]; // (1)' // 2秒ごとにbarを追加するためにインターバルタイマをセット [NSTimer scheduledTimerWithTimeInterval:2.0f target:self selector:@selector(onTimer:) userInfo:nil repeats:YES]; } // 2秒ごとに挿入のために呼ばれる -(void)onTimer:(NSTimer*)timer { // barを追加 [dataSouce addObject:@"bar"]; [self.tableView beginUpdates]; NSIndexPath* path = [NSIndexPath indexPathForRow:0 inSection:0]; // (2) [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:path] withRowAnimation:UITableViewRowAnimationTop]; [self.tableView endUpdates]; // (3) [self.tableView reloadData]; // (4) } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [dataSouce count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *id = @"default-cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:id]; if(!cell){ cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:id]; [cell autorelease]; } cell.textLabel.text = [dataSouce objectAtIndex:indexPath.row]; return cell; } #if 0 // (5) - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { if([dataSouce count] > 0) return 1; else return 0; } - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { // テストなので、聞かれたらTitleと答えておく return @"title"; } #endif @end このプログラムは一応動作するのですが、少し変えると期待通りに動作しません。 疑問1 コード中の(1)をコメントアウト及び(1)’をコメントインした状態で、初期値として "foo"が画面に表示された状態からスタートするようになりますが、このとき (2)で先頭に挿入するように記載していますが、実際には2行目に挿入されます。 foo bar bar 例えば4秒後にはこんな感じに並びます。なぜでしょうか? 疑問2 (4)のコードを書くと挿入時にアニメーションしません。(4)のコードを書かないとbarではなく fooが追加されたように見えます。スクロールしてフレームアウト/インなどの動作が あるとセルがリロードされ正しくbarになります。 挿入アニメーションを有効にしつつ最新データを参照させるにはどうしたらよいのでしょうか? 疑問3 (5)を#if 1とすることでセクションが表示されるようになりますが、このときに 初期値として何かあれば追加できますが、初期状態が空欄の場合に追加できず (3)のコードがSIGABRTを発行してしまいます((1)だとNG、(1)’だと通る)。 空欄のセクション付きリストにCellを挿入するにはどうしたらよいでしょうか? 経験が浅く、非常識なコードになっているのではないかと思いますが、 どうにも自力ではこれ以上進めなくなってしまいました。 上記1~3の一つでもいいので、なにかヒントをいただけないでしょうか? 未検証のカンによるアドバイスも歓迎です、こちらで検証させて頂きます。 どうかよろしくお願い致します。