Давайте назовем этот подкласс UIView - SomeClass. Этот SomeClass является частью статической библиотеки. Некоторые клиенты будут использовать эту библиотеку и добавят экземпляры этого SomeClass в ячейки своего (настольного) табличного представления.Определение видимой части (фрейма) подкласса UIView, которое добавляется в виде представления в ячейку в виде таблицы
I (SomeClass) необходимо определить, когда экран SomeClass «входит» в экран (станет видимым), и когда экран «выйдет» (станет невидимым).
Я могу использовать метод didMoveToWindow:
, а затем проверить self.window
для nil. НО, есть проблема, SomeClass получает это событие, прежде чем оно на самом деле видно, из-за того, что клетки «готовятся» по представлению таблицы. И я должен знать наверняка, это на 100% видно для некоторых пользователей.
Один из способов определения - использование
scrollViewDidScroll:
. Предположим, что SomeClass получит представление прокрутки, используя итерацию в супер-представлениях и подпишет как делегат для поиска прокрутки. Но он будет удален какой-то ячейкой, которая будет подписываться как делегат для просмотра прокрутки. Поэтому мне нужно придумать для этого какое-то решение. Например, в Android есть возможность добавить наблюдателя, в этом случае SomeClass всегда является слушателем и не отменяет никакого другого слушателя. В Android существует множество отношений, а не iOS, один к одному.В другом случае, я могу включить некоторый таймер в
didMoveToWindow:
, когда SomeClass становится видимым, что будет проверять каждое X-время, его кадр. Таймер будет отключен, когда SomeClass перейдет с экрана.Возможно, есть способ проверить на низком уровне, не используя прокрутку и таймер на некотором низкоуровневом методе перерисовывания. Является ли это возможным?
Итак, что является лучшим (будет использовать меньше ресурсов/хороший дизайн)?
Вы прочитали это сообщение? http://stackoverflow.com/questions/2453457/iphone-howto-get-notified-when-an-uiview-becomes-visible – rbd