swift - SpriteKit 场景在模态呈现 swift 后变形

标签 swift sprite-kit

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

只有当我从侧面呈现一个 View Controller 时才会出现问题。
当新的 View Controller 被关闭时,场景有效,但被扭曲了。 this is how it is displayed after a viewcontroller is displayed modally and later on dismissed .
编辑:我忘了提到,如果我在扭曲的场景上垂直滑动,扭曲是固定的,一切都很好。 这是 View Controller 的 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()
    }
}

最佳答案

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

关于swift - SpriteKit 场景在模态呈现 swift 后变形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48399633/

相关文章:

ios - 如何用手指移动 Sprite ?

ios - Web View 中的 Html5 播放器在 iOS 10 中的 native 播放器中打开视频

ios - 为什么我们在swift中给可选值赋值时忽略感叹号?

ios - 如何检查 SpriteKit 中屏幕的两半是否有触摸?

ios - 在 Sprite Kit 中创建按钮的正确方法?

ios - 开发tvos app需要ios app吗

Swift - 向 UITableViewCell 添加左边框

swift - 如何在 Swift 中将节点添加到不同类的 View 中

ios - 当spriteSceneNode到达ios SpriteKit中的某个点时如何触发函数

ios - 物理主体大于它分配给的纹理(图片)