在滚动视图滚动时更改标签位置

Change a label position while scrollview is scrolling

我在滚动视图之外有一个标签。我想在 scrollview 向上滚动时将标签从屏幕的左侧移动到右侧,反之亦然,并且 down.I 编写了这段代码,当 scrollview 以正常速度滚动并且滚动速度非常快时标签 x 位置变化很大慢慢地。对于所有 scrollview 滚动速度,我如何做到这一点?

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
}

所以,问题是滚动得越快,"gap" 进入 scrollViewDidScroll 事件之间的范围就越大。

您可能应该考虑使用 UIView.animate 来移动您的标签...这将创建更一致的体验,因为动画始终具有相同的速度。 这样您就可以使用 CGAffineTransform(translationX: , y: ) 应用动画 取决于你的 contentOffset.y 是否超过给定的阈值,每当该标签应该出现或消失时。