Я бы предпринял несколько иную попытку, пытаясь синхронизировать положение прокрутки двух текстовых представлений.Я бы сделал общий вид UIViewController
a UIScrollViewDelegate
.Я бы реализовал метод scrollViewDidScroll:
, который запрашивал бы только что прокручиваемое текстовое представление, в котором он прокручивался, а затем велел другому текстовому представлению прокручивать в ту же позицию.Чтобы предотвратить цикл, где этот метод повторяется, я бы установил флажок для проверки перед отправкой сообщения прокрутки.Это очень просто, если оба текстовых представления гарантированно имеют одинаковый размер, но может потребоваться больше работы, если они имеют разные размеры.Возможно, позиция прокрутки будет рассчитана на проценты.Возможно, представления прокрутки должны знать о содержимом и прокручивать до определенных заголовков.
Могут быть реализованы дополнительные методы в UIScrollViewDelegate
, чтобы сохранить синхронизацию во время пользовательской прокрутки, в зависимости от того, как я хотел, чтобы прокручивались текстовые представления.
В ответ на комментарии:
Похоже, что процентный расчет будет работать лучше в этой ситуации.Каждый вид прокрутки имеет свойства contentSize
и contentOffset
.Смещение другого вида можно рассчитать с помощью (thisView.contentOffset.x/thisView.contentSize.height) * otherView.contentSize.height
.
Я думал, что флаг может быть необходим, если вызов setContentOffset: animated: на другой прокрутке вызовет другой вызов делегата scrollViewDidScroll:
метод.Проверка флага может остановить цикл.Если флаг установлен, не говорите другому представлению прокрутки двигаться, потому что это реакционный scrollViewDidScroll
.
scrollViewDidScroll:
, вызываемый каждый раз, когда необходимо перерисовать представление прокрутки.Таким образом, в одном взаимодействии с пользователем этот метод может вызываться сотни раз.Одно это позволит синхронизировать два вида прокрутки.