Pull to refresh

Comments 13

Спасибо за ссылку, я думал об этом, но swizzling ведь тоже не лучший вариант, много читал о нем нехорошего. Что это сравни вуду и недокументированному хаку, а также что Swizzling has become a no-no and when being used will lead to rejection of an iOS app from iTunes
Не знаю, что там насчет вуду и хаков, свиззлинг — вполне нормальное средство при соблюдении нескольких условий. Необходимо перекрывать только публичные методы, не изменять собственного состояния объекта и однократно вызывать оригинальный метод in any case.

В отличие от этого подхода, перекрытие через категории — это undefined behavior.
закрывать hitTest категорией и реализацией с какими-то домыслами о работе оригинального метода – вообще ужасный вариант
что вы подразумеваете под домыслами? Или в чем я не прав описывая работу метода hitTest?
если точный код hitTest нигде не опубликован, то я уверен, что вы неправы
например, проверка на pointInside имхо бесполезна, потому что hitTest вызывается только тогда, когда в этой точке уже сработал pointInside
про pointInside был неправ, примерная реализация описывается в мануале про Responder Chain

но мой аргумент всё равно в том, что написано там одно, а на самом деле там ещё чёрт знает что может быть, нельзя это брать и так легко трогать
О боже. Method swizzling это следствие всей прелести obj-c runtime и каждый разраб должен уметь готовить его с закрытыми глазами.
Оверрайд с помощью категорий это UB.

Т.е вместо того, чтобы поймать за шкирку контейнер вью и заменить класс в рантайме на нужный подкласс с таким пропускным поведением, Вы решили воспользоваться Undefined Behavior и поменять поведение hitTest во всех UIView.

О какой черной коробке вообще может идти речь, если она модифицирует метод во всей системе?

PS: Apple не банит и никогда не банила за использование функций obj-c runtime, откуда Вы это взяли.
Вы правы, я сделал глупость забив стандартную реализацию метода для всех UIView. Отличная метафора про шкирку контейнера )
Я так и не понял – у вас в нижнем состоянии transition считается ещё не завершенным? Откуда там container view остаётся?
Я отказался от использования методов UIPercentDrivenInteractiveTransition по ряду причин, основной причиной было то, что если использовать cancelTransition: во время свайпа вниз, то это не позволит работать с навигацией вне модального окна, то есть не позволит ничего открыть\перейти в fromVC. Для перемещения модального окна я использую UIPanGestureRecognizer.
может стоило хотя бы заюзать `UIViewTransitioningDelegate` и `presentationControllerForPresentedViewController:presentingViewController:sourceViewController:`? чтобы там создать свой containerView и испортить pointInside только в нём
Sign up to leave a comment.

Articles