代码之家  ›  专栏  ›  技术社区  ›  maral

滚动视图时更改标签位置

  •  1
  • maral  · 技术社区  · 6 年前

    我在滚动视图外有一个标签。当滚动视图上下滚动时,我想将标签从屏幕的左向右移动,反之亦然。我写了这段代码,当滚动视图以正常速度滚动时,它就会工作,当滚动速度非常快时,标签x的位置变化非常缓慢。对于所有滚动视图滚动速度,我如何做到这一点?

    func scrollViewDidScroll(_ scrollView: UIScrollView!) {
    
        let offset = scrollView.contentOffset.y
        let imahey = view.convert(placeImgview.frame, from:scrollview).origin.y + placeImgview.frame.width
        print(offset)
        let ratio: CGFloat = (-offset*1.0 / placeImgview.frame.height)
        topBarView.alpha =  -ratio
        if placeName.frame.origin.x < -20 {
            placeName.center = CGPoint(x: placeName.center.x - 3*ratio, y: placeName.center.y + ratio/1.5)
        }
        if (self.lastContentOffset > scrollView.contentOffset.y) {
    
                placeName.center = CGPoint(x: placeName.center.x + 6*ratio, y: placeName.center.y - 2*ratio)
            if offset == -20 {
                placeName.frame.origin.x = -view.frame.width/2
                placeName.frame.origin.y = 60
            }
    
        }
    
        self.lastContentOffset = scrollView.contentOffset.y
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   MartinM    6 年前

    所以,问题是滚动速度越快,滚动视图和滚动事件之间的“间隙”越大。

    您可能应该考虑使用uiview.animate在标签周围移动…这将创建一个更一致的体验,因为动画始终具有相同的速度。 这样,您就可以使用cgaffinetTransform(translationx:,y:)应用动画。 取决于ContentOffset.y在标签出现或消失时是否通过了给定的阈值。