Swift 点击单元格中的按钮时,动画完成时会触发scrollViewDidScroll事件

Swift 点击单元格中的按钮时,动画完成时会触发scrollViewDidScroll事件,swift,uitableview,Swift,Uitableview,让我解释一下我的行为 这是一张有一串卡片的桌子 表格部分标题缩小,向下滚动时“开始研究”按钮向下滑动。 当向上滚动时, “开始学习”按钮总是向上滑动。 当滚动到最顶端时,标题会向后展开。 当一张卡片被轻触时,卡片会翻转。 func scrollViewDidScroll(_ scrollView: UIScrollView) { let currentOffset = scrollView.contentOffset.y let offsetDiff = self.lastCon

让我解释一下我的行为

这是一张有一串卡片的桌子

表格部分标题缩小,向下滚动时“开始研究”按钮向下滑动。
当向上滚动时,
“开始学习”按钮总是向上滑动。
当滚动到最顶端时,标题会向后展开。
当一张卡片被轻触时,卡片会翻转。

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let currentOffset = scrollView.contentOffset.y
    let offsetDiff = self.lastContentOffset - currentOffset
    
    if(currentOffset <= 0){
      
    }else{
      headerRef.transformHeader(currentOffset: currentOffset, offsetDiff: offsetDiff)
      if(self.lastContentOffset > currentOffset){ // move up
        if(isStudyButtonHidden){
          self.showStudyButton()
        }
      }else if(self.lastContentOffset < currentOffset){  // move down
        if(!isStudyButtonHidden){
          self.hideStudyButton()
        }
      }
    }
  
    self.lastContentOffset = currentOffset
  }
有人对此有什么想法吗?
非常感谢您抽出时间……

我知道这听起来有点不太对劲,但也许您可以在动画之前设置一个变量,然后在完成块中重置。您可以在
scrollViewDidScroll
中检查该标志并阻止更新。
func transformHeader(currentOffset: CGFloat, offsetDiff:CGFloat){
    
    let nextY:CGFloat
    let nextOffset = currentOffset - offsetDiff
    
    let transformValueRate:CGFloat
    
    if(nextOffset < 0){ // scrolled with pulling down to very top
      nextY = 0
      transformValueRate = 1
    }else if(nextOffset > maxTranslateY){ // scrolling down with pushing up
      print("stay shrinked")
      nextY = -maxTranslateY
      transformValueRate = 0
    }else{
      nextY = -currentOffset
      transformValueRate = 1 - (currentOffset / maxTranslateY)
    }
    
    let nextFontScale = 0.65 + (0.35 * transformValueRate)
    
    UIView.animate(withDuration: 0) {
      self.contentView.frame.origin.y = nextY
    
      self.headerTitleLabelRef.textColor = UIColor(red: 0, green: 0, blue: 0, alpha: transformValueRate)
      self.cardsLeftCntLabelRef.transform = CGAffineTransform(scaleX: nextFontScale, y: nextFontScale)
    }
  }
UIView.animate(withDuration: animationDuration, delay: 0, options: [], animations: {
      self.cardButton.layer.transform = rotationAndPerspectiveTransform
    }, completion: { (finished: Bool) in
      if(isTapped){
        self.delegate?.updateIsFlippedProp(card: self.card!)
      }
    })