我制作了一个游戏,我在UIView中有一个SKView,而SKView内部是一个SKScene。在viewDidLoad()
方法中,我想更改SKView上的约束,特别是宽高比。我已经应用了1:1的宽高比,我创建了一种方法来将宽高比更改为所需的宽高比。在我的viewDidLoad()
方法中,我调用以下内容:
ratioConstraint = changeMultiplier(ratioConstraint, multiplier: 2)
其中ratioConstraint
是负责宽高比的约束,changeMultiplier
如下:
func changeMultiplier(constraint: NSLayoutConstraint, multiplier: CGFloat) -> NSLayoutConstraint {
let newConstraint = NSLayoutConstraint(
item: constraint.firstItem,
attribute: constraint.firstAttribute,
relatedBy: constraint.relation,
toItem: constraint.secondItem,
attribute: constraint.secondAttribute,
multiplier: multiplier,
constant: constraint.constant)
newConstraint.priority = constraint.priority
NSLayoutConstraint.deactivateConstraints([constraint])
NSLayoutConstraint.activateConstraints([newConstraint])
return newConstraint
}
当我运行时,我收到错误:
<CAEAGLLayer: 0x7fc4e0f12450>: calling -display has no effect.
我不明白我做错了什么。我创建了另一个模拟此行为的测试项目,它按预期工作。任何帮助都会很棒。如果它有帮助,我可以发布测试项目以显示我想要的行为。谢谢你的帮助。
编辑:经过进一步测试后,我发现只有在changeMultiplier
中调用viewDidLoad
时才会出现此错误,这就是为什么它在我的测试项目中工作,因为我在调用它按下按钮。在呈现视图之前,我什么时候应该调用它来更新宽高比?
编辑:将其移至viewDidLayoutSubviews
解决问题。但是,现在如果我旋转设备,SKView就会消失,这在以前没有发生过。