Comments 13
stackoverflow.com/a/5272612/1271424
Нельзя забивать оригинальные методы категориями.
Если так приспичило, то swizzling
Нельзя забивать оригинальные методы категориями.
Если так приспичило, то swizzling
-1
Спасибо за ссылку, я думал об этом, но swizzling ведь тоже не лучший вариант, много читал о нем нехорошего. Что это сравни вуду и недокументированному хаку, а также что Swizzling has become a no-no and when being used will lead to rejection of an iOS app from iTunes
0
Не знаю, что там насчет вуду и хаков, свиззлинг — вполне нормальное средство при соблюдении нескольких условий. Необходимо перекрывать только публичные методы, не изменять собственного состояния объекта и однократно вызывать оригинальный метод in any case.
В отличие от этого подхода, перекрытие через категории — это undefined behavior.
В отличие от этого подхода, перекрытие через категории — это undefined behavior.
+1
закрывать hitTest категорией и реализацией с какими-то домыслами о работе оригинального метода – вообще ужасный вариант
+2
что вы подразумеваете под домыслами? Или в чем я не прав описывая работу метода hitTest?
0
если точный код hitTest нигде не опубликован, то я уверен, что вы неправы
например, проверка на pointInside имхо бесполезна, потому что hitTest вызывается только тогда, когда в этой точке уже сработал pointInside
например, проверка на pointInside имхо бесполезна, потому что hitTest вызывается только тогда, когда в этой точке уже сработал pointInside
0
про pointInside был неправ, примерная реализация описывается в мануале про Responder Chain
но мой аргумент всё равно в том, что написано там одно, а на самом деле там ещё чёрт знает что может быть, нельзя это брать и так легко трогать
но мой аргумент всё равно в том, что написано там одно, а на самом деле там ещё чёрт знает что может быть, нельзя это брать и так легко трогать
0
О боже. Method swizzling это следствие всей прелести obj-c runtime и каждый разраб должен уметь готовить его с закрытыми глазами.
Оверрайд с помощью категорий это UB.
Т.е вместо того, чтобы поймать за шкирку контейнер вью и заменить класс в рантайме на нужный подкласс с таким пропускным поведением, Вы решили воспользоваться Undefined Behavior и поменять поведение hitTest во всех UIView.
О какой черной коробке вообще может идти речь, если она модифицирует метод во всей системе?
PS: Apple не банит и никогда не банила за использование функций obj-c runtime, откуда Вы это взяли.
Оверрайд с помощью категорий это UB.
Т.е вместо того, чтобы поймать за шкирку контейнер вью и заменить класс в рантайме на нужный подкласс с таким пропускным поведением, Вы решили воспользоваться Undefined Behavior и поменять поведение hitTest во всех UIView.
О какой черной коробке вообще может идти речь, если она модифицирует метод во всей системе?
PS: Apple не банит и никогда не банила за использование функций obj-c runtime, откуда Вы это взяли.
0
[Obective-C setEnable:NO];
swift.enable = true
swift.enable = true
-3
Я так и не понял – у вас в нижнем состоянии transition считается ещё не завершенным? Откуда там container view остаётся?
0
Я отказался от использования методов UIPercentDrivenInteractiveTransition по ряду причин, основной причиной было то, что если использовать cancelTransition: во время свайпа вниз, то это не позволит работать с навигацией вне модального окна, то есть не позволит ничего открыть\перейти в fromVC. Для перемещения модального окна я использую UIPanGestureRecognizer.
0
Sign up to leave a comment.
Articles
Change theme settings
Реализуем свой dropDown ViewController (aka iOS 8 Mail app) в 200 строк