我的Swift / SpriteKit程序中有一个UITextView对象,但是从SpriteKit场景到SpriteKit场景的转换效果很好,我无法以类似的方式使UITextView动画化。
对于场景转换,我使用:
let transition = SKTransition.flipVerticalWithDuration(1)
let newScene = GameScene(size: self.frame.size)
view?.presentScene(newScene, transition: transition)
要删除UITextView,我使用
myUITextView.removeFromSuperview()
任何想法如何让textView在垂直轴上翻转,同时场景改变?
更新: 我意识到这可能太难了,所以我把它改成了......
let transition = SKTransition.revealWithDirection(.Right, duration: 1.0)
let newScene = GameScene(size: self.frame.size)
newScene.scaleMode = .AspectFill
let options = UIViewKeyframeAnimationOptions.CalculationModeLinear
UIView.animateKeyframesWithDuration(1.0, delay: 0.0, options: options, animations: {
UIView.addKeyframeWithRelativeStartTime(0, relativeDuration: 1/2, animations: {
self.myUITextView.transform = CGAffineTransformMakeTranslation(300, 0)
})
}, completion: {finished in
self.myUITextView.removeFromSuperview()
})
view?.presentScene(newScene, transition: transition)
场景转换和UITextView动画之间的确切时间需要一些调整,但这基本上有效,除了一个新问题。
我正在转换的新场景也有一个UITextView。这出现在我正在动画的那个上面(就像从卡片后面拉出一张卡片)。我理解为什么会发生这种情况,presentScene函数正在调用新场景,并用它来声明新的UITextView。因为SpriteKit和UIKit不能很好地协同工作,所以它被置于我试图删除的旧UITextView之上。任何想法如何实现这个动画,旧场景的UITextView保持在顶部?
Update2:我用以下命令做了一点实验:
let transitionOptions = UIViewAnimationOptions.TransitionFlipFromLeft
var views : (frontView: UIView, backView: UIView)
views = (frontView: self.myUITextView, backView: self.UITextView)
UIView.transitionFromView(views.frontView, toView: views.backView, duration: 1.0, options: transitionOptions, completion: nil)
当我这样做的时候,我希望myUITextView能够从左侧翻转,但令我惊讶的是整个SKView也以我想要的方式翻转。唯一的问题是toView指向同一个场景(所以它翻转回oldScene),我想转到newScene。任何想法如何指向新场景或在旧场景后面打开它?