2015-04-02 4 views
5

Я разрабатываю приложение iOS, которое имеет один вид UITableView с двумя пользовательскими UITableViewCell. Все это с помощью основной раскадровки.

Все работает очень хорошо. Но то, что мне нужно реализовать, - это одиночная затухающая анимация в/от только одна ячейка.

В настоящее время I'm, используя этот код, чтобы оживить вид:UIView animation внутри UITableViewCell

[UIView animateWithDuration:1.2 
         delay:0 
        options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat | UIViewAnimationOptionCurveEaseInOut animations:^{ 

         self.myView.alpha = 0; 

        } completion:^(BOOL finished) { 

         self.myView.alpha = 1; 

        }]; 

В методе «установлено содержание», который я называю в методе источника tableView:cellForRowAtIndexPath: данных о UITableView.

Анимация работает нормально. Даже если изменение между представлениями все еще оживляет вид. Моя проблема заключается в том, когда я перезагружаю данные из представления таблицы, или представление таблицы прокручивается вверх или вниз до тех пор, пока ячейка с анимацией не исчезнет, ​​и ей придется повторно использовать ячейку, чтобы отобразить ее снова, в этот момент ячейка не представлена ​​без анимации.

Что мне здесь не хватает? Есть ли лучший способ реализовать это? Как перезапустить анимацию после повторного использования ячейки в ячейке?

Я думаю, важно отметить, что в соответствии с моим дизайном пользовательского интерфейса только одна ячейка будет иметь анимацию.

Спасибо.

ответ

12

Я думаю, вы должны реализовать еще один delegate метод UITableView, который является -

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 

& выполнять анимацию на соответствующем виде соответствующей ячейки внутри него.

Ниже метод будет вызываться каждый раз, когда отображаются ячейка, (а также в случае, если он выходит из рамы Tableview и возвращается в видимую области)

-(void) tableView:(UITableView *) tableView willDisplayCell:(UITableViewCell *) cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    //row number on which you want to animate your view 
    //row number could be either 0 or 1 as you are creating two cells 
    //suppose you want to animate view on cell at 0 index 
    if(indexPath.row == 0) //check for the 0th index cell 
    { 
     // access the view which you want to animate from it's tag 
     UIView *myView = [cell.contentView viewWithTag:MY_VIEW_TAG]; 

     // apply animation on the accessed view 
     [UIView animateWithDuration:1.2 
         delay:0 
        options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat | UIViewAnimationOptionCurveEaseInOut animations:^ 
     { 
        [myView setAlpha:0.0]; 
     } completion:^(BOOL finished) 
     { 
        [myView setAlpha:1.0]; 
     }]; 
    } 
} 
+0

Да, тх помог, благодаря!. Но все еще не работает в некоторых других случаях, таких как метод reloadData. Благодаря вашему ответу, а также с помощью метода tableView: didEndDisplayingCell: forRowAtIndexPath: ', чтобы остановить анимацию, потому что кажется, что это также вызывает проблемы. –

+0

В willDisplayCell: если вы анимируете представление в течение 1,2 секунд, чем после того, как эта продолжительность закончится, анимация остановится автоматически, на самом деле я не понял использование tableView: didEndDisplayingCell: forRowAtIndexPath: method. Мне нужно знать его использование, можете ли вы, пожалуйста, немного рассказать об этом, спасибо. –

+0

Я использую его, чтобы удалить анимацию из представления, потому что я понял, что если анимация прерывается, она не начнется снова. –

Смежные вопросы