Сенсорные методы не работают с release build
Вопрос
У меня странная проблема, из-за которой пользовательский элемент управления, который я создал для iPhone, отлично работает при сборке в режиме отладки, но работает только частично при сборке в режиме выпуска.
Основной вид оболочки является подклассом UIView
и он содержит ряд "кнопок", которые добавляются в качестве вложенных представлений.Пользовательский класс button расширяет UIImageView
и переопределяет сенсорные методы со следующими сигнатурами:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
При создании отладочного кода все 4 из этих функций вызываются в то время, которое вы ожидаете, при сборке релиза ничего не происходит.У меня есть регистрация в каждом из них, и я не получаю никаких сообщений журнала (другое ведение журнала работает).
Еще одна интересная вещь, у меня есть переопределенные методы touchesBegan / Moved / Ended в классе просмотра оболочки, и они работают нормально.Я попытался закомментировать эти методы в классе-оболочке, чтобы посмотреть, повлияло ли это на кнопки, но этого не произошло.
Я также пытался изменить UIImageView
класс, который должен быть подклассом UIButton
вместо этого, но у меня там такая же проблема, включая любые события, такие как touchUpInside.Они работают в режиме отладки, но не выпуска.
Я пытался исследовать эту проблему, а также общую обработку событий, но пришел с пустыми руками.Есть идеи, где искать дальше?
Решение
Я, наконец, разобрался с проблемой - оболочка для элементов "button" имела высоту 0.В режиме отладки приложение обнаружило, что к кнопкам прикасались, даже если они не находились в области попадания их родительского представления (для clipsToBounds по умолчанию было выбрано значение NO, поэтому элементы кнопок по-прежнему были отлично видны), в режиме выпуска - не так сильно.
Надеюсь, это поможет некоторым людям сэкономить время на ломку головы и отладку, через которые мне пришлось пройти :) Я также опубликовал это в a bug в Apple, так что, надеюсь, когда-нибудь это будет исправлено.