UICollectionView анимация не показывает данные - PullRequest
0 голосов
/ 16 мая 2018

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

 fileprivate func startTimer() {

    if timer == nil {

      timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: (#selector(addAnimationToCollection)), userInfo: nil, repeats: true)
    }

  }
  func scrollToIndexPath(path: NSIndexPath) {
    let atts = self.collectionView!.layoutAttributesForItem(at: path as IndexPath)
    self.endPoint = CGPoint(x: 0, y: atts!.frame.origin.y - self.collectionView.contentInset.top)
    self.scrollPoint = self.collectionView!.contentOffset
    self.scrollingUp = self.collectionView!.contentOffset.y > self.endPoint!.y

    self.scrollTimer?.invalidate()
    self.scrollTimer = Timer.scheduledTimer(timeInterval:0.01, target: self, selector: (#selector(scrollTimerTriggered(timer:))), userInfo: nil, repeats: true)
  }

  func scrollTimerTriggered(timer: Timer) {

    let dif = fabs(self.scrollPoint!.y - self.endPoint!.y) / 10000.0
    let modifier: CGFloat = self.scrollingUp ? -2 : 2

    self.scrollPoint = CGPoint(x: self.scrollPoint!.x, y: self.scrollPoint!.y + (modifier * dif))
    self.collectionView?.contentOffset = self.scrollPoint!
    let maximumOffset = self.collectionView.contentSize.height - self.collectionView.frame.size.height
    if self.scrollingUp && self.collectionView!.contentOffset.y < maximumOffset {
      self.collectionView!.contentOffset = self.endPoint!
      timer.invalidate()
    } else if !self.scrollingUp && self.collectionView!.contentOffset.y >= self.endPoint!.y {
      self.collectionView!.contentOffset = self.endPoint!
      timer.invalidate()
    }

  }
  fileprivate func invelidTimer() {

    if timer != nil {
      timer?.invalidate()
      timer = nil
    }
    if scrollTimer != nil {
      scrollTimer?.invalidate()
      scrollTimer = nil
    }
  }
  @objc func  addAnimationToCollection() {

        let currentOffset = self.collectionView.contentOffset.y
        let maximumOffset = self.collectionView.contentSize.height - self.collectionView.frame.size.height
        if maximumOffset - currentOffset < 0 {
             let first : NSIndexPath = NSIndexPath(row: 0, section: 0)
          self.scrollToIndexPath(path: first)
        }
        else {
            let last : NSIndexPath = NSIndexPath(row: self.collectionList.count - 1, section: 0)
          self.scrollToIndexPath(path: last)

        }

  }
...