2017-04-10 3 views
1

私はUIPanGestureRecognizerを使用して移動可能な画像を取得しました。画面の端に近づくほど画像を透明にする必要があります。 以下は、画像を移動して回転させるために使用しているコードです。スウィフトでエッジから距離を取得3

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

UIPanGestureRecognizerの起動時に呼び出されるのを取得する機能:UIViewのにイメージを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

私は「それは中心から離れ者を取得し、さらには、」ビューの親の中心に相対的である(またはそれが何か他のものに比べていた場合、あなたはそれに応じて私の例を調整することができます)と仮定しています。

画像を水平方向に動かしているように見えるので、距離は単純な1次の計算でなければなりません。

のような何か:あなたはその後、フェージングのためにアルファを計算することができ

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 distanceToCenter = abs(gesture.view!.center.x - gesture.view!.parent!.center.x) 

あなたが垂直方向と水平方向の両方に移動された場合は、あなたが距離を取得するために第二度の計算が必要になります

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

スウィフトはいくつかのタイプcこれらの計算に迷惑をかける(少なくとも数学に通って数理が出るまで)

+0

ありがとう! これはまさに私が必要なものです:) –

関連する問題