人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Objective-Cの書き方を教えて下さい。まず1つめの画像を表示し、3秒後に2つめの画像を表示したいです。

ViewControllerのコードを以下のような感じで書きました。
実行すると、画面が3秒間何も表示されず、その後2つめの画像が表示されました(涙)

- (void)viewDidLoad
{
[super viewDidLoad];

〜image0, image1を準備〜

imageView.image = image0;
[NSThread sleepForTimeInterval:3.0];
imageView.image = image1;
}

●質問者: weed_7777
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● gyoh_k
●100ポイント ベストアンサー

おそらく、画面描画が行われるのがviewDidLoadメソッドの終了後なので、
viewDidLoadの途中でスリープしてしまうと画面描画がされないのだと思います。
performSelectorを使用するとうまくいくのではないでしょうか。

-(void)viewDidLoad
{
imageView.image = image0;
[self performSelector:@selector(showImage:) withObject:nil afterDelay:3.0];
}

-(void)showImage
{
imageView.image = image1;
}


パパトモさんのコメント
ちょち、違うような気がします。 viewDidLoadでafterDelayしては同じ結果になるのではないかと思います。

gyoh_kさんのコメント
あれ・・・失礼しました。 ちゃんと検証して答えるようにします。

gyoh_kさんのコメント
検証してみたところ、performSelector自体は正常に動作するっぽいです。 ただ、 showImage()の引数間違えてました…。 以下のコードでいかがでしょうか。 -(void)viewDidLoad { [super viewDidLoad]; imageView.image = image0; [self performSelector:@selector(showImage:) withObject:nil afterDelay:3.0]; NSLog(@"起動時"); } -(void)showImage:(NSString *)msg { imageView.image = image1; NSLog(@"3秒後"); }

weed_7777さんのコメント
ありがとうございます。お世話になります。よろしくお願いします。

weed_7777さんのコメント
おおお、試してみます

weed_7777さんのコメント
動きました!これは応用が効きそうなメソッドですね。ありがとうございます。

gyoh_kさんのコメント
解決してよかったです。 これ、結構iPhone開発者が皆、一度はひっかかるところだと思います、多分。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ