Ios 更改SKView上的约束时出错
我正在制作一个游戏,其中我在UIView中有一个SKView,在SKView中有一个SKView场景。在Ios 更改SKView上的约束时出错,ios,swift,sprite-kit,uikit,ios-autolayout,Ios,Swift,Sprite Kit,Uikit,Ios Autolayout,我正在制作一个游戏,其中我在UIView中有一个SKView,在SKView中有一个SKView场景。在viewDidLoad()方法中,我想更改SKView上的约束,特别是纵横比。我已经对它应用了1:1的纵横比,我创建了一个方法来将纵横比更改为所需的纵横比。在我的viewDidLoad()方法中,我调用以下命令: ratioConstraint = changeMultiplier(ratioConstraint, multiplier: 2) func changeMultiplier(c
viewDidLoad()
方法中,我想更改SKView上的约束,特别是纵横比。我已经对它应用了1:1的纵横比,我创建了一个方法来将纵横比更改为所需的纵横比。在我的viewDidLoad()
方法中,我调用以下命令:
ratioConstraint = changeMultiplier(ratioConstraint, multiplier: 2)
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
}
其中,ratioConstraint
是负责纵横比的约束,而changemplier
是以下内容:
ratioConstraint = changeMultiplier(ratioConstraint, multiplier: 2)
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.
:调用-显示无效。
我不明白我做错了什么。我创建了另一个测试项目,在那里我模拟了这种行为,它按预期工作。任何帮助都会很好。如果有帮助的话,我可以发布测试项目来显示我想要的行为。谢谢你的帮助
编辑:在进一步测试之后,我发现只有在viewDidLoad
中调用changemplier
时才会发生此错误,这就是为什么它在我的测试项目中工作的原因,因为我在按下按钮时调用它。在呈现视图之前,我应该何时调用它来更新纵横比
编辑:将其移动到
viewdilayoutsubviews
修复了该问题。但是,现在如果我旋转设备,SKView将消失,这是以前从未发生过的。这不应该是一个错误,这只是一个警告,说明什么也没有发生。您应该在viewdilayoutsubviews
method@Knight0fDragon当它向我发出警告时,SKView没有绘制。另外,我相信我已经在那里尝试过了。不确定为什么要尝试更改视图的纵横比,除非您仅将部分屏幕用于精灵套件,否则这是不正确的necessary@Knight0fDragon我只使用了部分屏幕。@Knight0fDragon我错了-我试过的是viewWillLayoutSubviews
。它按照您的建议在viewdilayoutsubviews
中工作。但是,如果我旋转设备,SKView就会消失。这不应该是一个错误,这只是一个警告,说明什么也没有发生。您应该在viewdilayoutsubviews
method@Knight0fDragon当它向我发出警告时,SKView没有绘制。另外,我相信我已经在那里尝试过了。不确定为什么要尝试更改视图的纵横比,除非您仅将部分屏幕用于精灵套件,否则这是不正确的necessary@Knight0fDragon我只使用了部分屏幕。@Knight0fDragon我错了-我试过的是viewWillLayoutSubviews
。它按照您的建议在viewdilayoutsubviews
中工作。但是,如果我旋转设备,SKView将消失。