2017-04-10 5 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) 

당신이 모두 수직 및 수평으로 이동한다면, 당신은 거리를 얻을 수있는 2도 계산을해야합니다 다음과 같이 출력합니다 :

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

스위프트는 일부 유형 c 이 계산을 위해 asting (적어도 그것이 수학 학교에 가고 숫자 이론을 계산할 때까지)

+0

고마워요! 그게 정확히 내가 필요한 것입니다 :) –