让我们调用这个UIView子类 - SomeClass。这个SomeClass是静态库的一部分。一些客户将使用此库,并将此SomeClass的实例添加到其(客户)表视图的单元格中。
I(SomeClass)需要确定SomeClass何时“进入”屏幕(将变为可见),何时“退出”屏幕(将变为不可见)。
我可以使用didMoveToWindow:
方法,然后检查self.window
是否为零。但是,有一个问题,SomeClass在它实际可见之前得到了这个事件,因为细胞通过表视图概念“准备”。我需要确切知道,某些用户可以100%看到它。
确定的一种方法是使用scrollViewDidScroll:
。假设SomeClass将通过在超级视图上使用迭代来获得滚动视图,并将订阅为找到滚动视图的委托。但是他将被一些单元格删除,该单元格将自己订阅为滚动视图的委托。所以我需要在这里发明一些解决方案。例如,在Android中,有可能添加观察者,在这种情况下,SomeClass始终是一个侦听器,并不会覆盖任何其他侦听器。 Android中存在多对一关系,而不像iOS中那样,一对一。
另一方面,当SomeClass变得可见时,我可以在didMoveToWindow:
中启用一些计时器,这将检查每个X时间及其帧。当SomeClass从屏幕开始时,计时器将被禁用。
可能有一种方法可以在低级别检查,而不使用某些低级重绘方法的滚动视图和计时器。有可能吗?
那么什么是最好的(将使用更少的资源/良好的设计)方法?
答案 0 :(得分:0)
您可以使用CGRectIntersectsRect检查单元格的框架是否与自定义视图的框架相交。除此之外,didMoveToWindow是您正在寻找的方法。
如果您说表视图单元格总是将SomeClass作为子视图,那么使用UITableViewDelegate tableView:willDisplayCell:forRowAtIndexPath:会更有意义。