Мы столкнулись с этой проблемой при внедрении интерактивного увольнения контроллера модального представления (перетаскивание модального вниз должно отклонить его) через UIPercentDrivenInteractiveTransition
.Сбой при интерактивном отклонении модального
Установка:
- установки
UIViewController
встроенный вUINavigationController
по меньшей мере одной кнопки вUINavigationBar
- модально представить другой
UIViewController
встроенный вUINavigationController
, по крайней мере, одна кнопка вUINavigationBar
- установки
UIPanGestureRecognizer
на modaly представленыUINavigationController
наводнениеUIPercentDrivenInteractiveTransition
- перетащить модальный do шп «держит» его точкой на
UINavigationBar
Издания:
, медленно тянет вниз, анимацию глюков вызывая модальный вид прыгать вверх и вниз
глюк появляется только тогда, когда:
- оба
UINavigationBar
s имеют по крайней мере одну кнопку на них - вы "держать" модальный точкой на
UINavigationBar
- оба
Minimal, например, может быть загружен с github repo.
Неужели кто-нибудь сталкивается с такой проблемой? Есть ли обходные пути? Есть ли недостатки в нашей установке?
Update
Проблема была смоделирована на управлении проектом выше на iPhone 5 тренажере с iOS 9.3
, OSX 10.11.4
, скомпилированные с Xcode 7.3.1
.
Update 2
Дальнейшие исследования показали, что этот вопрос, вероятно, не в анимации: По какой-то причине в данной установке pan.translationInView(view)
возвращает неожиданные значения, которые вызывают анимацию прыгать.
Частичное Обойти
Основываясь на идее Владимира мы частично исправили проблему путем переопределения hitTest
метод UINavigationBar
:
class DraggableNavigationBar: UINavigationBar {
override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? {
guard let view = super.hitTest(point, withEvent: event) else { return nil }
if view is UIControl || pointIsInsideNavigationButton(point) {
return view
} else {
return nil
}
}
private func pointIsInsideNavigationButton(point: CGPoint) -> Bool {
return subviews
.filter { $0.frame.contains(point) }
.filter { String($0.dynamicType) == "UINavigationItemButtonView" }
.isEmpty == false
}
}
Работы для меня. Невозможно увидеть какие-либо сбои на моем iPhone 6 или в iOS Simulator для iPhone 6. –
НЕТ проблемы в выше code.work, например, чары – iMHitesh
могут поделиться точной проблемой со мной. Какой тип ОС и версия xCode и цель развертывания и т. Д. – iMHitesh