可以使用一些帮助来解决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()
}
}
答案 0 :(得分:0)
我解决了我的问题。 它与新的iOS 11 adjustContentInset属性有关。 当模式转换后出现视图时,我的Coin SK场景被滚动处理程序移动 我的解决方案是在视图出现后禁用前0.1秒的滚动。这样,iOS 11不再触摸硬币,而用户能够正确滚动,因为它们在大多数时间后至少0.1秒与视图交互。