Прокрутка Magic Mouse Momentum не работает
К сожалению, мне сложно испытать себя, потому что я еще не получил собственную Магическую Мышь, но мои тестеры, у которых есть волшебная мышь, сказали мне, что прокрутка импульса не работает в моем приложении. Я не делил на подклассы NSScrollView, но представление документа scrollview полностью настраивается. Я не переопределил scrollWheel: нигде, но пока что импульс просто не работает. Я даже не уверен, с чего начать. Я думал, что он просто отправит события scrollWheel, и все позаботится о себе. (Прокрутка колесиком или на трекпаде MBP работает, как и ожидалось.) Очевидно, я должен как-то делать что-то, что его останавливает, но я даже не знаю, с чего начать. Мысли?
2 ответа
Я понял это некоторое время назад, и проблема заключалась в том, что при прокрутке я выполнял много необычных манипуляций с представлениями, подобно тому, как на iPhone UITableView добавляет и удаляет представления при их прокрутке на экране и за его пределами. Это отлично работало для производительности - но чем больше я увлекался программированием на OSX, тем больше понимал, что это неправильно для OSX (но правильная идея iPhone).
В любом случае, похоже, что на самом деле происходит то, что когда вы делаете что-то вроде прокрутки колеса, событие прокрутки отправляется в представление, находящееся под курсором мыши, и затем оно сбрасывает респондеры / представления, пока не получит то, что обрабатывает его., Обычно это не проблема, но при прокрутке импульса ОС на самом деле просто отправляет все меньшие события scrollWheel в представление, которое находилось под курсором в момент запуска импульса. Это означает, что если представление удалено во время прокрутки (потому что оно прокручивается за пределы экрана или чего-то еще), оно разрывает цепочку и импульс останавливается, потому что представление, которое все еще получает сообщения scrollWheel, больше не находится в иерархии представления.
"Простое" исправление заключается в том, чтобы не удалять представление, получившее последнее событие scrollWheel, даже если оно не на экране. Лучшее решение (и тот, с которым я пошел) состоит в том, чтобы не пытаться использовать NSViews, как будто они являются UIViews, а вместо этого просто рисовать контент, используя drawRect.:) Мало того, что это примерно в миллиард раз быстрее, он просто работает (тм) с прокруткой импульса, потому что именно так OSX ожидает, что что-то будет сделано.
Повторяйте за мной: OSX - это не iPhoneOS..:P
Странное поведение при прокрутке может возникнуть, если вы не установите свойства Line Scroll и Page Scroll самого NSScrollView.
Кроме того, вам достаточно просто получить Magic Mouse - легко сказать или нет:-) - чтобы проверить это самостоятельно или опубликовать весь код вашего пользовательского представления, а также код, содержащий его. Без этого другие люди не могут предложить вам больше, чем догадки (как указано выше).