使用动画从SpriteKit应用程序中删除UITextView

时间:2015-04-02 17:07:37

标签: swift animation sprite-kit uitextview

我的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。任何想法如何指向新场景或在旧场景后面打开它?

0 个答案:

没有答案