2017-04-10 164 views
1

我使用UIPanGestureRecognizer獲得了可移動的圖像,我需要使圖像越接近屏幕邊緣越透明。 下面是我用來移動和旋轉圖像越遠離中心的代碼。獲取距離邊緣的距離3

添加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) 

然後,您可以計算阿爾法褪色如下:

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

請注意,Swift可能需要一些類型的c爲這些計算而奮鬥(至少直到它進入數學和數理理論)

+0

謝謝! 這正是我需要:) –