我有一个应用程序,显示连接图的节点。当用户触摸节点时,通过在节点后面显示clearColor“connections”视图来突出显示相邻节点的路径,该视图的大小适合包含感兴趣的节点。此视图包含每个路径的子视图,每个路径视图都有一个drawRect方法,该方法绘制出现在源节点和每个相邻节点后面的单行。一切都很好,这种方法开启了未来路径上做有趣事情的潜力。
然而,我最近添加了检测外部显示器的代码,其主要显示是滚动视图内的放大视图,外部显示器将显示所有节点的全局视图。它工作正常,直到我将连接视图添加到外部显示器,以显示在主显示屏上通过触摸选择的内容。在我调用setNeedsDisplay之后,我的路径视图(以及它们的父视图和祖父视图)完全相同,在调用setNeedsDisplay时,从不调用其drawRect方法,也不会调用它们的主视图堂兄弟。它们都以相同的方式初始化。
我已经尝试了几十(几百个)的东西来隔离问题,但还没有弄清楚问题。如果我在连接视图中添加一个通用UIView,它会出现在两个地方,但是我的路径视图(通过添加一个drawRect扩展了UIView)只能在我的主显示器上调用,而不会在我的外部显示器上调用。
我已经没想完了。有没有人对问题的原因有什么想法?
答案 0 :(得分:0)
我拉着头发试图弄清楚这个。比较两个视图的状态没有显示任何差异。几天前,我终于决定写一些python例程在LLDB中运行,它会转储对象的状态,然后在两个视图上做差异。事实证明他们试图显示相同的子视图!
为了最小化对象创建,我将路径子视图填充到一个数组中,以避免创建超出我需要的数量并在不使用时隐藏它们。但是,我愚蠢地在@interface块之外声明了这个数组,并且无意中将它变成了全局,因此两个视图都使用了定义的最后一组子视图。当然,视图不能是多个父视图的子视图。将声明移到正确的位置可以解决问题。
哑巴错误!但也许这会让其他有类似问题的人慢慢来。