Umgang mit touch-Ereignissen innerhalb von ein Kind UIScrollView
Ich bin anzeigen einer Reihe von Bildern in einer UIScrollView. Ich habe so ziemlich replizieren möchten Sie die Fotos-Anwendung.
Meine aktuelle Architektur ist:
- Ein Elternteil UIScrollView mit Inhalt Größe, die breit genug für x Anzahl der Seiten + einige extra Raum für die Ränder zwischen den Bildern.
- Jedes Bild enthalten ist, in einem UIImageView.
- Jeder UIImageView enthalten ist, innerhalb der eigenen UIScrollview, die dann die Unteransichten der übergeordneten UIScrollView.So dass ich im wesentlichen eine Reihe von UIScrollViews in einem übergeordneten UIScrollView.
Den Eltern UIScrollView ist paging aktiviert, so kann ich Blättern von Seite zu Seite ohne Probleme.
Das problem ist, wie nahtlos schwenken, um ein vergrößertes Bild. Ich überschrieben haben, die
viewForZoomingInScrollView
Methode zum zurückgeben der entsprechenden UIImageView, wenn der Benutzer drückt in/out. Ich habe überschrieben, diescrollViewDidEndZooming
Methode, um die übergeordnete Ansicht dercanCancelContentTouches
EigenschaftNO
wenn der zoom-Maßstab größer als 1 ist.So dass die Nutzer in der Lage sind zu schwenken, um ein Bild. Jedoch, Sie müssen halten Ihren finger nach unten für einen moment, um hinter die kleine Verzögerung der Eltern-scroll-view muss vor dem senden von touch-events unten an den Untersichten. Auch, wenn der Benutzer ist das panning in einem Bild, die next/prev Bilder werden nicht geben Sie den sichtbaren Bereich, wenn der Benutzer erreicht hat, die Grenze des aktuellen Bildes.
Irgendwelche Ideen?
Dank.
InformationsquelleAutor Ryan Brubaker | 2008-10-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich zu tun hatte ein ähnliches setup, aber ich im Grunde benutzerdefinierte schrieb, die ganze Sache. Ich bin mir nicht sicher, wie Sie gehen zu bekommen, um das problem der 'übergabe' touch-Ereignisse aus dem Kind UIScrollView zu den übergeordneten UISscrollView wenn Sie erreichen den Rand. Sie könnten versuchen, überschreiben UITouchesBegan:withEvent: in Ihrem übergeordneten UIScrollView und dumping direkt an das Kind. Viel Glück!
InformationsquelleAutor Ben Gottlieb
Yay! Ich habe versucht, dieses problem anzugehen, mit nur einem UIScrollView, und ich denke ich habe eine Lösung gefunden.
Bevor der Benutzer beginnt, Zoomen (in
viewForZoomingInScrollView:
), Wechsel ich die scroll-Ansicht zu Zoomen-Modus (entfernen Sie alle zusätzlichen Seiten, der reset-Inhalt, - Größe und offset). Wenn der Benutzer zoomt wieder heraus auf Skala von 1,00 (inscrollViewDidEndZooming:withView:atScale:
), ich wechseln Sie zurück zu paging-Ansicht einfügen (alle Seiten, anpassen der Größe des Inhalts und offset).Hier ist der code für eine einfache view-controller, die genau das tut. Dieses Beispiel schaltet zwischen, zoomt und schwenkt drei großen UIImageViews.
Beachten Sie, dass eine single-view-controller mit einer Handvoll Funktionen ist aller, den es nimmt, keine Notwendigkeit, Unterklasse UIScrollView oder so etwas.
Lauffähigen Beispiel-Projekt zur Verfügung zu http://github.com/andreyvit/ScrollingMadness/ (wenn Sie nicht Git verwenden, klicken Sie einfach auf den Download-button dort). Eine README ist vorhanden, die erklären, warum der code wurde so geschrieben, wie es ist.
(Beispiel-Projekt zeigt auch, wie zoom, scroll-Ansicht programmgesteuert ändern, und hat ZoomScrollView Klasse kapselt eine Lösung. Es ist eine nette Klasse, aber ist nicht erforderlich für diesen trick. Wenn Sie wollen, ein Beispiel, der nicht ZoomScrollView, gehen Sie zurück ein paar commits commit-Geschichte.)
P. S. der Vollständigkeit halber, es gibt TTScrollView — UIScrollView von Grund auf neu implementiert. Es ist Teil des großen und berühmten Three20 library. Ich weiß nicht, wie fühlt es sich für den Benutzer, aber es macht die Implementierung von paging/scrollen/Zoomen tot einfach.
P. P. S. Der echte Foto-app von Apple hat vor-SDK-code und nutzt pre-SDK-Klassen. Man Stelle zwei Klassen, die von pre-SDK-Variante von UIScrollView innen PhotoLibrary Rahmen, aber es ist nicht sofort klar, was Sie tun (und Sie tun eine ganze Menge). Ich kann leicht glauben, dass dieser Effekt verwendet werden, die schwieriger zu erreichen im pre-SDK Zeiten.
InformationsquelleAutor Andrey Tarantsov
Dies ist das Andrej ' s code mit c# übersetzung für monotouch-Entwicklern...
Zuerst müssen Sie zum Bearbeiten Ihrer xib-Datei Einfügen.. 3 view-Controller und stellen Sie outlets wie _page1, _page2, _mainpage.. und verknüpfen diese Steckdosen mit Aussicht. Hinweis: Sie müssen die Referenz auf view-controller view-Steckdose mit _mainpage anzeigen. (sorry für mein Englisch)
InformationsquelleAutor
Habe ich ein Beispiel-Projekt, und es funktioniert perfekt.
https://code.google.com/p/uiscrollview-touch-events/
InformationsquelleAutor Can