1
У меня очень странная проблема с UIPanGestureRecognizer. Я использую распознаватель для поворота 3D-модели или камеры в SceneView.Перевод UIPanGestureRecognizer всегда равен нулю в iPad
Устройство распознавания работает на iPhone. Однако, если я запускаю приложение на iPad (физическом или симуляторе), распознаватель распознается, но перевод всегда равен нулю.
Почему? Опять же, iPhone отлично работает. Это ошибка? создание
распознаватель:
// Model Rotation
let rotationRecognizer = UIPanGestureRecognizer(target: self, action: #selector(self.rotationRecognized(sender:)))
rotationRecognizer.minimumNumberOfTouches = 1
rotationRecognizer.maximumNumberOfTouches = 1
self.view.addGestureRecognizer(rotationRecognizer)
Обработчик события:
// 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
}
}