2017-04-10 7 views
1

Ich habe ein bewegliches Bild mit UIPanGestureRecognizer und ich muss das Bild transparenter machen, je näher es an den Rand des Bildschirms kommt. Unten ist der Code, den ich verwende, um das Bild zu verschieben und zu drehen, je weiter es von der Mitte entfernt ist.Entfernung von der Kante in Swift 3

die UIPanGestureRecognizer zum UIView das Bild hinzuzufügen ist in:

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

Die Funktion, die die UIPanGestureRecognizer beginnt bekommen genannt, wenn.

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 
    } 
} 

Antwort

1

Ich gehe davon aus, dass „weiter es ist weg von der Mitte erhält“ ist relativ zur Mitte des übergeordneten Ansicht (oder wenn es sonst etwas Relatives ist, können Sie mein Beispiel entsprechend anpassen).

Da Sie scheinen, das Bild nur horizontal zu verschieben, sollte der Abstand eine einfache Berechnung ersten Grades sein.

Etwas wie:

let distanceToCenter = abs(gesture.view!.center.x - gesture.view!.parent!.center.x) 

Wenn Sie sowohl vertikal bewegte und horizontal, müssen Sie eine zweiten Grad Berechnung den Abstand zu bekommen:

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) 

Sie könnten dann die Alpha-Berechnung für Fading wie folgt aus:

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

Beachten Sie, dass Swift einen Typ c benötigen kann tinging für diese Berechnungen (zumindest bis es Mathe Schule geht und zahlen Zahlen Theorie)

+0

Vielen Dank! Das ist genau das, was ich brauchte :) –