добавить NSTimer в NSArray с UIImages - PullRequest
0 голосов
/ 03 ноября 2011

Я пытаюсь добавить анимацию для 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 голосов
/ 03 ноября 2011

Я считаю, что проблема в том, что 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++;
}

Надеюсь, это поможет вам

...