2013-07-19 87 views
0

因此,我的這個項目的最終目標是有一對夫婦的圖像和一個UIImageview,並有圖像每隔10秒更改一次,我目前有NSTimer設置和圖像數組,但我不知道如何利用兩個NSTimer和UIImage視圖一起。 到目前爲止,這是我:用NSTimer更改UIImage?

在我的.h:

#import <UIKit/UIKit.h> 

@interface HomeViewController : UIViewController { 
NSTimer *myTimer; 
IBOutlet UIImageView *imageview; 
} 

@property (nonatomic, strong) NSArray *images; 

所以現在,你已經看到的代碼在我的.m

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 

myTimer = [NSTimer scheduledTimerWithTimeInterval:10.00 target:self  selector:@selector(changeImage) userInfo:nil repeats:YES]; 
} 

- (void)changeImage 
{ 
_images = @[@"Background 3.png", @"Background.png", @"Background 2.png", @"Background 4.png", @"Background 5.png"]; 

//stuck here, how do I change the image using the NStimer interval???? 

} 

,我有找出changeImage方法內部應該進行的操作有困難。只是在回顧我想要的數組中的5個圖像在UIImage視圖中每10秒循環一次。我已經嘗試了很多選項,但我無法將其整理出來。任何幫助將不勝感激。

+0

爲什麼這個拇指被擊倒?最近有人已經連續投票下了這個網站。 – John

+1

@John好吧,是不是我,但這是一個男人問,我想,今天早上問的一個問題。而且這個人並沒有表現出對編程概念的最小理解 - 他不應該編寫Objective-C。 –

+1

複製http://stackoverflow.com/questions/17736718/changing-uiimage-every-10-seconds –

回答

2

你可以簡單地使用下面的代碼來做到這一點。

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    _images = @[@"Background 3.png", @"Background.png", @"Background 2.png", @"Background 4.png", @"Background 5.png"]; 
    myTimer = [NSTimer scheduledTimerWithTimeInterval:10.00 target:self selector:@selector(changeImage) userInfo:nil repeats:YES]; 
} 

- (void)changeImage 
{ 
    static int counter = 0; 
    if([_images count] == counter+1) 
    { 
     counter = 0; 
    } 
    imageview.image = [UIImage imageNamed:[_images objectAtIndex:counter]; 

    counter++; 
} 
+2

如果計數器等於_images.count,請記住將計數器重置爲零 - 或者只使用(計數器%5)訪問數組。 –

+0

@DavidDoyle:我在編輯,當你把評論:)無論如何感謝您的評論。 –

+0

@Midhun MP這很好,它的開始工作,但是它只有一次開關然後停止,我怎麼能使它繼續? – user2600115

0

在.H

@property (assign) NSInteger currentIndex; 

也viewDidLoad中ER東西設置將這個在changeImage

imageview.image = [_images objectAtIndex:self.currentIndex]; 
if (self.currentIndex == (_images.count-1)) { 
    self.currentIndex = 0; 
} else { 
    self.currentIndex++; 
} 

,和本:

self.currentIndex = 0; 
0

有幾種方法做這個,我會推薦用戶userInfo您的NSTimer的屬性,而不是保留一個靜態變量。這樣,您不必擔心跟蹤單獨的計數變量,您可以啓動它並運行(但由於其他原因,您可能想要跟蹤它):

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    _images = @[@"Background 3.png", @"Background.png", @"Background 2.png", @"Background 4.png", @"Background 5.png"]; 

    myTimer = [NSTimer scheduledTimerWithTimeInterval:10.00 target:self selector:@selector(changeImage:) userInfo:[NSNumber numberWithInt:0] repeats:YES]; 
} 

然後你的回調:

- (void)changeImage: (NSTimer *)timer 
{ 
    int index = timer.userInfo.intValue; 

    imageview.image = [UIImage imageNamed:[_images objectAtIndex:index]; 

    timer.userInfo = [NSNumber numberWithInt: (index + 1) % _images.count]; 
}