2012-03-09 32 views
0

當我按下按鈕我想所述第一圖像以在顯示的UIImageView,停留很短的時間週期,然後將下一個圖像來顯示。經過一段時間後纔會顯示第二張圖片。第一個圖像永遠不會出現。在以按下按鈕目標C的Xcode更改UIImages

// TestProjectViewController.m 
// Created by Jack Handy on 3/8/12. 

#import "TestProjectViewController.h" 

@implementation TestProjectViewController 

@synthesize View1= _view1; 
@synthesize yellowColor = _yellowColor; 
@synthesize greenColor = _greenColor; 


    - (IBAction)button:(id)sender { 

     _greenColor = [UIImage imageNamed: @"green.png"]; 
      _view1.image = _greenColor; 

    [NSThread sleepForTimeInterval:2]; 

     _yellowColor = [UIImage imageNamed: @"yellow.png"]; 
      _view1.image = _yellowColor; 

} 
@end 
+0

傑克,很高興地聽到,摸索出。如果你發現任何有用的答案,請投票。如果其中一個是您的解決方案,請將其標記爲答案。 – gaige 2012-03-09 10:41:02

回答

0

U可以試着放置

_yellowColor = [UIImage imageNamed: @"yellow.png"]; 
      _view1.image = _yellowColor; 

代替作爲

[NSThread sleepForTimeInterval:2]; 

調用這個

[self performSelector:@selector(changeColor) withObject:nil afterDelay:2]; 
+0

我試過這個,得到這個錯誤 – 2012-03-09 01:21:57

+0

我得到了什麼錯誤? – 2012-03-09 01:24:11

+0

1,他沒有實施'changeColor' – JiaYow 2012-03-09 01:24:52

0

在這裏的問題是,要更換的操作系統有機會繪製之前的圖像。由於所有這三種操作:更改圖像,等待2秒,再次更改圖像)發生在按鈕操作返回之前,您正在阻止主線程執行並因此刷新屏幕。所以,發生的事情是,在2秒後,屏幕上會顯示最近放置的圖像。

你必須等待單獨發生。有三種典型的方式做到這一點,每一個都有自己的優點: - 送自己使用-performSelector:withObject:afterDelay: 延遲的消息 - 產卵另一個線程或使用調度隊列在後臺爲睡眠運行一個線程,然後發送郵件從 到主線程 - 或者,使用一個計時器。

我的建議是使用定時器,因爲它很容易取消,如果你需要做一些像移動到另一個屏幕。

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target: self selector: @selector(updateColor:) userInfo: nil repeats: NO]; 
// store the timer somewhere, so that you can cancel it with 
// [timer invalidate]; 
// later as necessary 

再後來:在創建碼值,然後改變-updateColor:交替...或招:

-(void)updateColor:(NSTimer*)timer 
{ 
    _yellowColor = [UIImage imageNamed: @"yellow.png"]; 
    _view1.image = _yellowColor; 
} 

如果你想要的顏色交替,你可以通過YES的重複到下一個顏色。

+0

得到它的工作謝謝! – 2012-03-09 01:53:56

相關問題