gpt4 book ai didi

swift - 如何在 UIScrollView 移动时正确转换 UIView 的比例

转载 作者:搜寻专家 更新时间:2023-10-31 22:42:46 24 4
gpt4 key购买 nike

为了获得与 Snapchat 的 HUD 移动类似的效果,我创建了一个基于 UIScollView 的 contentOffset 的 HUD 元素的移动。 编辑:Link to the Github project .

func scrollViewDidScroll(_ scrollView: UIScrollView) {
self.view.layoutIfNeeded()

let factor = scrollView.contentOffset.y / self.view.frame.height

self.transformElements(self.playButton,
0.45 + 0.55 * factor, // 0.45 = desired scale + 0.55 = 1.0 == original scale
Roots.screenSize.height - 280, // 280 == original Y
Roots.screenSize.height - 84, // 84 == minimum desired Y
factor)
}

func transformElements(_ element: UIView?,
_ scale: CGFloat,
_ originY: CGFloat,
_ desiredY: CGFloat,
_ factor: CGFloat) {
if let e = element {
e.transform = CGAffineTransform(scaleX: scale, y: scale) // this line lagging

let resultY = desiredY + (originY - desiredY) * factor
var frame = e.frame
frame.origin.y = resultY
e.frame = frame
}
}

使用此代码实现的滚动以及过渡似乎“滞后”/不流畅。 (实体 iPhone 6S+ 和 7+)。

删除以下行:e.transform = CGAffineTransform(scaleX: scale, y: scale) 消除了这个问题。 UIView 对象的滚动和 Y 移动 再次平滑。

变换对象比例的最佳方法是什么?

enter image description here

没有布局约束。

func setupPlayButton() {
let rect = CGRect(x: Roots.screenSize.width / 2 - 60,
y: Roots.screenSize.height - 280,
width: 120,
height: 120)
self.playButton = UIButton(frame: rect)
self.playButton.setImage(UIImage(named: "playBtn")?.withRenderingMode(.alwaysTemplate), for: .normal)
self.playButton.tintColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
self.view.addSubview(playButton)
}

最佳答案

发生这种情况是因为您同时应用了:transformframe。如果您只应用 transform,它会更平滑。如下更新您的 transformElements 函数:

    func transformElements(_ element: UIView?,
_ scale: CGFloat,
_ originY: CGFloat,
_ desiredY: CGFloat,
_ factor: CGFloat) {
if let e = element {
e.transform = CGAffineTransform(scaleX: scale, y: scale).translatedBy(x: 0, y: desiredY * (1 - factor))

}
}

关于swift - 如何在 UIScrollView 移动时正确转换 UIView 的比例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43469323/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com