2016-05-19 8 views
3

Я добавил бесконечную анимацию в uiTableViewCell, которая просто мигает UILabel внутри ячейки таблицы.UIView.animateWithDuration останавливается после прокрутки uitableviewcell

моя проблема, когда я прокручивает TableView он просто останавливается мигание

мой код

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("TripListCell", forIndexPath: indexPath) as! TripListCell 

    let trip = tripList[indexPath.section] 
    cell.lblTripDirection.textColor = UIColor(red: 51/255, green: 210/255, blue: 123/255, alpha: 1.0) 

    UIView.animateWithDuration(0.5, delay: 0.0, options: [.CurveEaseInOut, .Repeat, .Autoreverse, .AllowUserInteraction], animations: { 

     cell.lblTripDirection.alpha = 0.0 
     }, completion: { 
      bool in 
     cell.lblTripDirection.alpha = 1.0 
     cell.lblTripDirection.textColor = UIColor.blackColor() 
    }) 
    return cell 
} 

Update:

UIView.commitAnimations() работал для меня. Спасибо всем :)

ответ

0

UIView.commitAnimations() работал для меня.

+0

Где вы объявили UIView.commitAnimations()? У вас есть рабочий пример? –

1

Вы можете переопределить prepareForReuse метод UITableViewCell в пользовательской ячейке TripListCell

prepareForReuse называется каждый раз, когда dequeueReusableCellWithIdentifier называется.

надеюсь, что это поможет!

0

Вы должны поместить свой код в этом методе UITableViewDelegate:

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath); 
1

Это происходит потому, что cellForRowAtIndexPath resuse той же ячейке, чтобы отобразить другие данные. поэтому вы не записываете свою анимацию в cellForRowAtIndexPath.

Вам следует попробовать написать awakeFromNib из custom cell class или вы должны использовать способ willDisplayCell для создания анимации.

надеюсь, что это поможет :)

+0

awakeFromNib: проблема остается такой же, –

+0

willDisplayCell: не работает –

+0

@ParthBhuva это очень старый вопрос, но вы в конечном итоге решили это? –

0

TableViews повторно их клетки таким образом, неизбежно ваш ярлык остановить их анимации.

Вы можете восстановить повторно используемую ячейку в состояние по умолчанию либо в prepareForReuse: в пользовательской таблице представления таблицы, либо в поле tableView:willDisplayCell:forRowAtIndexPath: delegate method.

В этом случае вы используете анимацию UIView, вам нужно изменить значение анимированного свойства, чтобы отменить анимацию и вернуться в состояние по умолчанию.

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { 

    //declaring the cell variable again 

    var cell: TripListCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as! TripListCell 
    UIView.performWithoutAnimation { 
     cell.lblTripDirection.layoutIfNeeded() 
    } 
    // do your animation.. 
    ... 
}