0

我有一个显示连接图节点的应用程序。当用户触摸一个节点时,我通过在节点后面显示一个 clearColor“连接”视图来突出显示到相邻节点的路径,该视图的大小可以包含感兴趣的节点。此视图包含每个路径的子视图,并且每个路径视图都有一个 drawRect 方法,该方法绘制一条出现在源节点和每个相邻节点后面的线。一切都很好,这种方法打开了在未来用路径做有趣事情的潜力。

但是,我最近添加了代码来检测外部显示器,其想法是主显示器将是滚动视图内的放大视图,而外部显示器将显示所有节点的全局视图。在我将连接视图添加到外部显示器以显示通过触摸主显示器选择的内容之前,它工作正常。据我所知,我的路径视图(以及它们的父视图和祖父视图)是相同的,在调用 setNeedsDisplay 之后,它们的 drawRect 方法永远不会被调用,它们的主视图表亲也是如此。它们都在相同的位置以相同的方式初始化。

我已经尝试了几十(几百?)的事情来隔离问题,但还没有找出问题所在。如果我将通用 UIView 添加到连接视图,它会出现在两个地方,但是我的路径视图(通过添加 drawRect 来扩展 UIView)只会在我的主显示器上调用,而不会在我的外部显示器上调用。

我已经没有想法了。有没有人对问题的原因有任何想法?

4

1 回答 1

0

我正在拉头发试图弄清楚这一点。比较两种视图的状态并没有显示出任何差异。几天前,我终于决定编写一些 python 例程在 LLDB 中运行,它会转储对象的状态,然后对两个视图进行比较。事实证明,他们试图显示相同的子视图!

为了尽量减少对象的创建,我将路径子视图填充到一个数组中,以避免创建比我需要的更多并在不使用时隐藏它们。但是,我愚蠢地在 @interface 块之外声明了这个数组,并且无意中将它变成了一个全局的,所以两个视图都使用了最后一组定义的子视图。当然,一个视图不能是多个父视图的子视图。将声明移到正确的位置解决了这个问题。

愚蠢的错误!但也许这会给其他有类似问题的人带来一些好处。

于 2012-10-03T00:42:43.617 回答