ПРОБЛЕМА:
У меня есть NSScrollView. Я использую его для реализации собственного «табличного представления» со строками данных, которые на самом деле являются NSViews. (Примечание: это не экземпляр NSTableView.)
Когда я выполняю вертикальную прокрутку (горизонтальная прокрутка отсутствует), я использую уведомление boundsChanged для добавления (в качестве подпредставлений содержимого view scrollView) видимых NSView (объектов с фреймами, которые пересекают видимый прямоугольник документа scrollView) и для удалите те, которые больше не видимы (кадры вне видимого прямоугольника scrollView.)
Процесс работает прекрасно, за исключением случаев, когда речь идет об инерционной прокрутке. Если я наведу курсор на ячейку X и щелкну трекпадом, чтобы прокрутить вниз БЫСТРО с инерцией, ячейка X быстро покинет видимый прямоугольник и, как таковая, будет удалена из contentView scrollView. НО, это убивает инерционную прокрутку. Если я НЕ удаляю ячейку X как подпункт, тогда инерционная прокрутка работает отлично.
ЧТО МНЕ НУЖНО:
Способ сохранить инерционную прокрутку, все еще удаляя NSView, над которым курсор оказался, когда пользователь запустил жест прокрутки.
ЧТО Я ПРОБОВАЛ:
Я посмотрел на метод NSResponder:
-scrollWheel:(NSEvent *)theEvent
Реализация по умолчанию передает scrollWheel следующему респонденту. Итак, я создал подкласс NSScrollView и реализовал этот метод, чтобы попытаться не дать ему передать событие scrollWheel отдельным подпунктам внутри представления содержимого scrollView. Не сработало
Итак, я вошел в свои NSView (те, которые я добавляю в contentView) и переопределил scrollWheel, чтобы передать событие обратно в сам scrollView. Не сработало
Я все еще получаю прокрутку в обоих случаях, но не с инерцией.
Есть идеи? Спасибо!