我有一个使用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
}
}
答案 0 :(得分: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可能需要某些类型转换才能进行这些计算(至少在进入数学学院并计算数论之前)