2017-01-01 7 views
1

です。私はSceneViewで3Dモデルやカメラを回転させるように認識装置を使用しています。翻訳は、私が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 
    } 
} 

答えて

1
// MARK: Rotation of Model and Camera 
func rotationRecognized(sender: UIPanGestureRecognizer) 
{ 
    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 
     return 
    } 

    let translation = sender.translation(in: sender.view) 

    // Began 
    if translation.x == 0 && translation.y == 0 && self.rotationMode == .none 
    { 
     return 
    } 
    else 
    { 
     // First change after recognition 
     if self.rotationMode == .none 
     { 
      if abs(translation.x) > 0 
      { 
       self.rotationMode = .model 
      } 
      else if abs(translation.y) > 0 
      { 
       self.rotationMode = .camera 
      } 
     } 
     else 
     { 
      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 
       } 
      } 
     } 
    } 
} 
関連する問題