使用UIImages将NSTimer添加到NSArray

时间:2011-11-03 17:27:49

标签: iphone objective-c uiimage nstimer

我正在尝试为添加到数组中的UIImages添加动画。我想将动画添加到数组索引0并使其动画化。我想更改imageCount并每隔3秒为其设置动画。我还添加了NSTimer,这将帮助我更改图像,但它没有正确更改图像。我喜欢一个菜单列表,其中第一个链接应该是动画的。有没有人遇到过这样的问题,可以帮助我。

- (void)viewDidLoad {
[super viewDidLoad];
[NSTimer scheduledTimerWithTimeInterval:3 
                                 target:self 
                               selector:@selector(animateFunction) 
                               userInfo:nil 
                                repeats:YES];
[self setListArray:[NSMutableArray arrayWithObjects:@"",@"List",@"To-Do",nil]];

}

 -(void)animateFunction
   {
NSLog(@"Timer heartbeat %i",imageCount);
if (imageCount == 2) {
    // set the image count back to initial value;
    imageCount = 1;
} else {
    imageCount++;
}

[self setCellIconNames:[NSArray arrayWithObjects:[NSString stringWithFormat:@"image%i.png", imageCount],@"final.png",@"blue.png",nil]];
}



- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

NSUInteger row = [indexPath row];


NSString *cellIconName = [[self cellIconNames] objectAtIndex:[indexPath row]];

UIImage *cellIcon = [UIImage imageNamed:cellIconName];
[[cell imageView] setImage:cellIcon];

cell.textLabel.text = [listArray objectAtIndex:row];
cell.backgroundColor = [UIColor clearColor];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

return cell;
}

1 个答案:

答案 0 :(得分:0)

我认为问题是每次调用与计时器关联的方法时imageCount被设置为1。尝试将标头文件中的imageCount声明为int imageCount;,从imageCount = 1;方法中删除animateFunction并将其放在viewDidLoad或类似的方法中进行初始化它。然后,当您迭代imageCount时(如果您愿意,可以用imageCount = imageCount + 1代替imageCount++),它会正确地将1添加到变量中,而不是每次返回2(这就是目前的方法)。如果您需要循环图像,则需要设置一个检查,以重置imageCount,如下所示:

if (imageCount == yourMaxNumber) {
    // set the image count back to initial value;
    imageCount = 1;
} else {
    imageCount++;
}

希望这对您有所帮助