Ich habe ein sehr seltsames Problem mit dem UIPanGestureRecognizer. Ich benutze den Erkenner, um ein 3D-Modell oder die Kamera in einem SceneView zu drehen.Übersetzung von UIPanGestureRecognizer ist immer Null in iPad
Der Erkenner funktioniert auf dem iPhone. Wenn ich die App jedoch auf einem iPad (physisch oder im Simulator) starte, wird der Erkenner erkannt, aber die Übersetzung ist immer Null.
Warum ist das? Auch hier funktioniert das iPhone großartig. Ist das ein Fehler?
Recognizer Schöpfung:
// Model Rotation
let rotationRecognizer = UIPanGestureRecognizer(target: self, action: #selector(self.rotationRecognized(sender:)))
rotationRecognizer.minimumNumberOfTouches = 1
rotationRecognizer.maximumNumberOfTouches = 1
self.view.addGestureRecognizer(rotationRecognizer)
Der Event-Handler:
// MARK: Rotation of Model and Camera
func rotationRecognized(sender: UIPanGestureRecognizer) {
if sender.state == .began {
let translation = sender.translation(in: self.sceneView)
Swift.print(translation)
if abs(translation.x) > 0 {
self.rotationMode = .model
} else if abs(translation.y) > 0 {
self.rotationMode = .camera
}
} else if sender.state == .changed {
let translation = sender.translation(in: self.sceneView)
if self.rotationMode == .model {
if rootNode != nil {
var newAngleY = Float(translation.x/4) * Float(M_PI/180.0)
newAngleY += currentYAngle
rootNode!.eulerAngles.y = newAngleY
}
} else if self.rotationMode == .camera {
if cameraNode != nil {
var newAngle = Float(translation.y/4) * Float(M_PI/180.0)
if translation.y < 0 { // Up
if Math.toDegrees(Double(newAngle + currentXAngle)) < -70 {
return
}
} else if translation.y > 0 { // Down
if Math.toDegrees(Double(newAngle + currentXAngle)) > -10 {
return
}
}
newAngle += currentXAngle
cameraNode!.eulerAngles.x = newAngle
}
}
} else if sender.state == .ended {
if self.rotationMode == .model {
if rootNode != nil {
currentYAngle = rootNode!.eulerAngles.y
}
} else if self.rotationMode == .camera {
if cameraNode != nil {
currentXAngle = cameraNode!.eulerAngles.x
}
}
self.rotationMode = .none
}
}