2015-10-14 4 views
1
 UIView.animateWithDuration(2, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 6, options: [], animations: ({ 

     self.background.center.x = self.view.frame.width + 600 
     self.PlayButton.center.x = self.view.frame.width + 600 
     self.infoButton.center.x = self.view.frame.width + 600 
     self.logo.center.x = self.view.frame.width + 600 
     self.infoHidden.center.x = self.view.frame.width + 600 
     self.settingsButton.center.x = self.view.frame.width + 600 
     self.shareButton.center.x = self.view.frame.width + 600 
     //self.adBanner.center.x = self.view.frame.width + 600 
     self.view.frame.width + 800 

    }), completion: nil) 

    let View2 = self.view as! SKView  // View 
    View2.ignoresSiblingOrder = false  // Perfomance 
    let Play = GameScene()     // Game 
    Play.scaleMode = .ResizeFill   // Scale 
    View2.presentScene(Play)    // Present 

Почему этот код возвращает исключение «Не удалось ввергнуть значение типа„UIView“(0x1f1ed90) к„SKView“»? Этот код работал раньше, и внезапно он начинает бросать исключение. Класс My View установлен в SKView в раскадровке. Странно то, что это исключение только начинало бросаться, когда я реализовал iad в своей игре. Есть что-то, чего я не хватает?Когда я UIView на обратное приведение SKView, я получаю исключение

ответ

1

Я думаю this thread поможет, а именно эта цитата

SKView подкласс UIView. Представление UIViewController может представлять собой любой объект UIView типа , он не обязательно должен быть объектом UIView .

Обратите внимание, что этот код все равно может завершиться с ошибкой во время выполнения, если представление не было SKView (например, если оно действительно было объектом UIView), поэтому вы должны быть уверены, что это должно быть .

Главное, что ваш UIView - это не SKView, а скорее UIView, поэтому вы получаете исключение во время выполнения. попробуйте использовать необязательный downcast как? и справиться с ситуацией, когда ниспровергается.