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

Posted

技术标签:

【中文标题】在滚动视图滚动时更改标签位置【英文标题】:Change a label position while scrollview is scrolling 【发布时间】:2019-01-15 14:56:39 【问题描述】:

我在滚动视图之外有一个标签。我想在滚动视图上下滚动时将标签从屏幕的左到右移动,反之亦然。我编写了这段代码,它在滚动视图以正常速度滚动并且滚动非常快时标签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】:

所以,问题在于滚动得越快,scrollViewDidScroll 事件之间的“间隙”就越大。

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

【讨论】:

thanks.Using CGAffineTransform(translationX: , y: ) 解决了这个问题。

以上是关于在滚动视图滚动时更改标签位置的主要内容,如果未能解决你的问题,请参考以下文章

滚动视图滚动时,有任何更好的方法可以无延迟地更改CAlayer位置

更改视图控制器时保持滚动位置

在方向更改时恢复列表视图中的项目和滚动位置

SwiftUI:如何根据滚动视图的用户当前滚动位置同步/更改进度条进度?

当 UIScrollView 在可见视图之外滚动按钮时更改 UIButton textLabel 位置

滚动或重新加载表格视图后视图位置更改