Wir haben dieses Problem bei der Implementierung interaktiver Entlassung eines Modal-View-Controllers (Ziehen von Modal-Down sollte es entlassen) über UIPercentDrivenInteractiveTransition
.Glitch bei interaktivem Löschen von Modal
Setup:
- Setup
UIViewController
inUINavigationController
eingebettet mit mindestens einer Taste inUINavigationBar
- modal weiteren zur Zeit
UIViewController
eingebettet inUINavigationController
mit mindestens einer Taste inUINavigationBar
- Setup
UIPanGestureRecognizer
auf modaly präsentiertUINavigationController
fahrenUIPercentDrivenInteractiveTransition
- ziehen modal do wn "Betrieb" durch Punkt auf
UINavigationBar
Ausgabe:
, während sie langsam nach unten ziehen, Animation Glitches modale Ansicht verursacht springen auf und ab
Glitch nur angezeigt, wenn:
- beide
UINavigationBar
s haben mindestens einen Knopf auf ihnen - Sie "halten" durch den Punkt modal auf
UINavigationBar
- beide
Minimal Beispiel aus github repo heruntergeladen werden.
Hat jemand über ein solches Problem kommen? Gibt es Workarounds? Gibt es einen Fehler in unserem Setup?
aktualisiert
Ausgabe hat mit iOS 9.3
, auf laufende Projekt über auf iPhone 5-Simulator simuliert OSX 10.11.4
, 7.3.1
mit Xcode zusammengestellt.
Update 2
Weitere Untersuchungen zeigten, dass Problem wahrscheinlich nicht in der Animation ist: Aus irgendeinem Grunde in bestimmten Setup pan.translationInView(view)
unerwartete Werte zurückgibt, die Animation zu springen verursacht.
Teil Abhilfe
Basierend auf Wladimirs Idee, die wir teilweise das Problem behoben durch zwingende hitTest
Methode der 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
}
}
Funktioniert für mich. Kann keine Störungen entweder auf meinem iPhone 6 oder in dem iOS-Simulator für iPhone 6 sehen. –
KEIN Problem in oben code.work mag Charme – iMHitesh
kann genaues Problem mit mir teilen. Welches OS-Typ und xCode-Version und Aufstellungsziel usw. – iMHitesh