一尘不染

错误:UIView的窗口不等于另一个视图的窗口

swift

我是一个学习敏捷的初学者。在这里的第一篇文章。

额外信息,但可能不必要。
在我创建的此应用中,用户在主View控制器上选择一个图像,并将其传递给第二个View控制器。在那里,图像被分解成碎片,并将这些碎片放置在单独的UIImageViews中。目的是通过交换图像以正确的顺序放置它们。

一切正常,并且在模拟器中运行正常。但是,我试图添加基本动画(移动UIImageViews),但是它们没有执行。我知道动画的语法正确,因为我在另一个项目中测试了代码。

主要问题
当我从主视图控制器导航到第二个视图控制器时,控制台中立即出现错误。它说的是:

2014-09-04 17:51:33.489 TileGame [79951:95150647] UIView:0x7f7fe9c84600; 框架=(0
0; 320568); 自动调整大小= W + H; layer = CALayer:0x7f7fe9c848d0

的窗口不等于TileGame.GameScreen:0x7f7fe9dc6bc0>视图的窗口!

我不知道这意味着什么,但除了阻止动画外,它似乎没有引起任何问题。有任何想法吗??

看起来这个人有类似的错误消息,但可能比我的应用程序复杂。在presentViewController:animated:completion之后,模态viewcontroller
UI不响应:

这是我在GitHub上的整个项目:https : //github.com/pakalewis/Parker-Lewis-
CF/tree/master/TileGame

谢谢


阅读 191

收藏
2020-07-07

共1个答案

一尘不染

您似乎对iOS编程范例有一些基本的误解。您已经将segue附加到按钮上,但是您还可以在代码中调用performSegue。当将segue附加到控件时,不需要任何代码(也应该没有任何代码)来使segue执行。您也不应使用放松功能返回到先前的视图控制器,而要放松放松。您并没有真正回去,而是在创建您认为要回去的控制器的新实例。这将导致控制器堆积(因为不会释放控制器),直到您的应用程序内存不足。

因此,您应该从MainScreen删除函数letPlayButton:,并在情节提要中删除它(您只需要在该按钮上附加segue)即可​​。

从GameScreen到MainScreen删除要“返回”的segue,然后将backToMainScreen中的代码更改为此,

@IBAction func backToMainScreen(sender: AnyObject) {
        self.dismissViewControllerAnimated(true, completion: nil)
    }
2020-07-07