Ich muss ein Symbol drehen abhängig von der aktuellen Rotation eines anderen UIImageview machen. Dafür habe ich ein UIImageView, dessen Bewegung durch eine Rotation der Benutzergeste gesteuert wird. Ich habe auch eine UIView, die Symbole enthält, die ich richtig drehen muss. Diese UIView hat immer die exakt gleiche Position und Rotation wie die UIImageview.Macht eine UIImageview drehen abhängig von einer anderen UIImageview Rotation
Grafisch ist es das, was ich tun muss:
Ich schaffe es, die Bewegung mit diesem Code:
ich die Geste mit dem folgenden Code verwaltet:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
origin = (touches.first?.locationInView(self.view))!
xOffSet = CGVector(dx:(origin.x)-rotateImageView.center.x, dy:(origin.y) - rotateImageView.center.y)
startingAngle = atan2(xOffSet.dy,xOffSet.dx)
//save the current transform
tempTransform = rotateImageView.transform
}
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
let touch = touches.first
if touch!.view === rotateImageView || touch!.view === viewIcons {
let touchPoint = touches.first?.locationInView(self.view)
yOffSet = CGVector(dx:touchPoint!.x - rotateImageView.center.x, dy:touchPoint!.y - rotateImageView.center.y)
let angle = atan2(yOffSet.dy,yOffSet.dx)
let deltaAngle = angle - startingAngle!
rotateImageView.transform = CGAffineTransformRotate(tempTransform, deltaAngle)
viewIcons.transform = CGAffineTransformRotate(tempTransform, deltaAngle)
rotateIconsWithImageView (ivClock , angle: deltaAngle)
}
}
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
startingAngle = nil
}
//reset in case drag is cancelled
override func touchesCancelled(touches: Set<UITouch>?, withEvent event: UIEvent?) {
rotateImageView.transform = tempTransform
startingAngle = nil
}
Dieser Code verhindert ein anderes Problem, das auftritt, wenn der Benutzer die Geste in einem anderen Abschnitt des Bildschirms startet. Detaillierte Informationen finden Sie auf dieser eine andere Stackoverflow Thread zu sehen: Rotation gesture produces undesired rotation
Für die Rotation, wenn das Symbol ich diese Funktion verwenden, die ich als letzter Befehl auf touchesMoved aufrufen:
func rotateIconsWithImageView (imageview:UIImageView , angle: CGFloat) {
imageview.transform = CGAffineTransformRotate(tempTransform, -angle)
}
Dies funktioniert normalerweise (wie Sie siehe auf dem gif) wenn ich die Geste starte ohne den Touchbereich zu ändern. Aber wenn der Benutzer den Touchbereich ändert, ist die Rotation falsch und da ich nicht mit transform benutzt werde, bin ich mir nicht sicher was genau zu tun ist.
Diese gif illustrieren das Problem:
Vielen Dank im Voraus
Aber das ist genau das gleiche Problem wie die andere Frage! Ich habe dir schon gesagt, dass deine ganze 'TempTransform'-Sache völlig unnötig ist. Es ist auch falsch, und jetzt kommt diese Tatsache zurück, um dich zu beißen. – matt
Kannst du mir den vollständigen Code dafür liefern? –