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

Posted

技术标签:

【中文标题】在swift 3中获取与边缘的距离【英文标题】:Get distance from the edge in swift 3 【发布时间】:2017-04-10 20:15:42 【问题描述】:

我有一个使用 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
    

【问题讨论】:

【参考方案1】:

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

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

类似:

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 可能需要一些类型转换来进行这些计算(至少在它进入数学学校并弄清楚数论之前)

【讨论】:

谢谢!这正是我需要的:)

以上是关于在swift 3中获取与边缘的距离的主要内容,如果未能解决你的问题,请参考以下文章

JQuery 获取元素到浏览器可视窗口边缘的距离

图解js中距离问题

在 solr 3.6 中获取与 geohash 字段的距离

获取点和影片剪辑之间的距离

如何在swift 3.0中计算用户从当前位置行进的距离

如何在 swift 中使用 HealthKit 获得步行和跑步距离