Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 更改SKView上的约束时出错_Ios_Swift_Sprite Kit_Uikit_Ios Autolayout - Fatal编程技术网

Ios 更改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

我正在制作一个游戏,其中我在UIView中有一个SKView,在SKView中有一个SKView场景。在
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将消失。