0

所以我对这个项目的最终目标是有几个图像和一个UIImageview,并且每 10 秒改变一次图像,我目前有NSTimer设置和图像数组但是我不知道如何同时使用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 秒循环一次。我已经尝试了很多选项,但我无法解决。任何帮助将不胜感激。

4

3 回答 3

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++;
}
于 2013-07-19T16:19:17.400 回答
0

把它放在changeImage中

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

这在.h

@property (assign) NSInteger currentIndex;

也在 viewDidLoad er 中设置了这个:

self.currentIndex = 0;
于 2013-07-19T16:24:17.500 回答
0

有几种方法可以做到这一点,我建议用户使用userInfoyour 的属性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];
}
于 2013-07-19T16:25:03.523 回答