模态演示swift后SpriteKit场景变形

时间:2018-01-23 10:38:58

标签: swift sprite-kit

可以使用一些帮助来解决SpriteKit场景的问题 我有一个场景,在应用程序的主要部分显示一些硬币 当我从底部呈现一个viewcontroller我没有问题。标签栏导航相同,没有问题。 Here is the view as it should always be displayed

只有当我从侧面呈现一个视图控制器时才出现问题  当新的viewcontroller被解除时,场景可以正常工作,但是会失真。 this is how it is displayed after a viewcontroller is displayed modally and later on dismissed
编辑:我忘了提到如果我在扭曲的场景上垂直滑动,失真是固定的,一切都很好。 以下是viewcontroller的viewDidAppear中的一些代码。 谢谢你的帮助。
编辑2: 我刚刚使用iOS 10在iPhone 5上测试了应用程序,问题不会发生。这可能与iOS 11有关吗?

func configureScene(_ completion: () -> Void) {
    defer { completion() }

    guard wScene == nil else { return }

    let skView = SKView(frame: self.view.frame)
    skView.isUserInteractionEnabled = false
    skView.backgroundColor = .clear

    wScene = WScene(size: view.frame.size)
    wScene.backgroundColor = .clear
    skView.presentScene(wScene)
    view.insertSubview(skView, belowSubview: collectionView)

    if let buttonsObstacle = doubleButton?.buttonsView {
        let obstacleSize = CGSize.init(width: buttonsObstacle.frame.width, height: buttonsObstacle.frame.height)
        obstacle = SKSpriteNode.init(color: .clear, size: obstacleSize)
        guard let obstacle = obstacle else { return }
        obstacle.name = WScene.obstacleNodeName

        let convertedOrigin = view.convert(buttonsObstacle.center, from: buttonsObstacle.superview)
        let skConvertedOrigin = skView.convert(convertedOrigin, to: wScene)
        obstacle.position = skConvertedOrigin

        obstacle.physicsBody = SKPhysicsBody(rectangleOf: obstacleSize)
        obstacle.physicsBody?.allowsRotation = false
        obstacle.physicsBody?.isDynamic = false
        source.scrollHandler = { [weak self] (scrollView) in
            guard let strongSelf = self else { return }
            strongSelf.buttonsMoved(inView: skView, withScroll: scrollView)
        }
        wScene.addChild(obstacle)

        presenter.loadData()
    }
}

1 个答案:

答案 0 :(得分:0)

我解决了我的问题。 它与新的iOS 11 adjustContentInset属性有关。 当模式转换后出现视图时,我的Coin SK场景被滚动处理程序移动 我的解决方案是在视图出现后禁用前0.1秒的滚动。这样,iOS 11不再触摸硬币,而用户能够正确滚动,因为它们在大多数时间后至少0.1秒与视图交互。