gpt4 book ai didi

ios - 在swift 3中获取与边缘的距离

转载 作者:行者123 更新时间:2023-11-28 06:21:23 24 4
gpt4 key购买 nike

我有一个使用 UIPanGestureRecognizer 的可移动图像,我需要使图像越靠近屏幕边缘越透明。下面是我用来移动和旋转离中心越远的图像的代码。

将 UIPanGestureRecognizer 添加到图像所在的 UIView:

let moveImage = UIPanGestureRecognizer(target: self, action: #selector(self.detectPan))
moveImage.cancelsTouchesInView = false
MainImageView.addGestureRecognizer(moveImage)

在 UIPanGestureRecognizer 启动时调用的函数。

func detectPan(gesture: UIPanGestureRecognizer) {
if gesture.state == UIGestureRecognizerState.began || gesture.state == UIGestureRecognizerState.changed {
let translation = gesture.translation(in: self.view)
gesture.view!.center = CGPoint(x: gesture.view!.center.x + translation.x, y: gesture.view!.center.y)
gesture.setTranslation(CGPoint(x: 0,y: 0), in: self.view)
let newValue = CGFloat(((gesture.view!.center.x + translation.x) - (self.view.bounds.width * 0.50)) / 500)
MainImageView.transform = MainImageView.transform.rotated(by: -lastValue)
MainImageView.transform = MainImageView.transform.rotated(by: newValue)
lastValue = newValue
}
}

最佳答案

我假设“它离中心越远”是相对于 View 父 View 的中心的(或者如果它是相对于其他东西,您可以相应地调整我的示例)。

由于您似乎只是水平移动图像,因此距离应该是一个简单的一次度计算。

类似于:

let distanceToCenter = abs(gesture.view!.center.x - gesture.view!.parent!.center.x)

如果您同时垂直和水平移动,则需要二次计算才能获得距离:

let deltaX = gesture.view!.center.x - gesture.view!.parent!.center.x  
let deltaY = gesture.view!.center.y - gesture.view!.parent!.center.y
let distanceToCenter = sqrt(deltaX*deltaX + deltaY*deltaY)

然后您可以按如下方式计算淡出的 alpha:

let alpha = 1 - 2 * distanceToCenter / gesture.view!.parent!.bounds.size.width

请注意,Swift 可能需要为这些计算进行一些类型转换(至少在它上数学学校并弄清楚数论之前)

关于ios - 在swift 3中获取与边缘的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43332221/

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