在滚动视图滚动时更改标签位置
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:如何根据滚动视图的用户当前滚动位置同步/更改进度条进度?