5

Ok, also was ich versuche, einen Document Viewer zu tun ist, erstellen, die das Bild ist ähnlich: enter image description hereBenutzerdefinierte QLPreviewController oder UIDocumentInteractionController, die Touch-Ereignisse abfangen

Im Grunde, was geschehen soll, ist, wenn der Bildschirm überall angezapft , erscheint die obere und untere Leiste. Tippe erneut und sie verschwinden.

Ich habe subclassed QLPreviewController und haben es geschafft, die (oben) Navigationsleiste zu nutzen, die bereits mit QLPreviewController kommt. Das funktioniert gut. Jetzt muss ich die untere Leiste anzeigen lassen, wenn die obere Leiste angezeigt wird. Ich kann am Ende der Seite eine UIToolbar hinzufügen, aber ich muss die Berührungsereignisse abfangen, damit ich die untere Leiste ein- und ausblenden kann. Ich kann mir nicht vorstellen, wie ich es zur Arbeit bringen soll. Ich habe versucht, ein UITapGestureRecognizer zu der Ansicht der QLPreviewController Unterklasse selbst zu keinem Glück hinzuzufügen. Ich versuchte auch, ein Überlagerung UIView zu schaffen, das ein UITapGestureRecognizer hat aber das verhinderte, dass die Benutzerform mit dem Dokument darunter interagiert.

Jeder hat irgendwelche Ideen, wie man das macht? Danke im Voraus!

Antwort

3

Ok, ich habe herausgefunden, was das Problem mit der UITapGestureRecognizer war. Sie müssen die Delegierten selbst setzen, und dann überschreiben die

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

Funktion und zurück ja. Also in meinem QLPreviewController Unterklasse implementiert ich die UIGestureRecognizerDelegate, und in der viewWillAppear:

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(documentTapped:)]; 
tapGesture.cancelsTouchesInView = NO; 
tapGesture.delegate = self; 
[self.view addGestureRecognizer:[tapGesture autorelease]]; 

Dann einfach:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { 
    return YES; 
} 

Auf diese Weise wird die QLPreviewController noch erhalten alle anderen Nicht-Tap Touch-Ereignisse so dass der Benutzer immer noch mit dem Dokument

0

Subclass QLPreviewController interagieren und dann außer Kraft setzt

-(void)contentWasTappedInPreviewContentController:(id)item {} 

Das war's!

+0

Leider scheint dies keine wertvolle Lösung zu sein, da Apple es als private API betrachtet. siehe http://stackoverflow.com/questions/6091027/qlpreviewcontrollers-view#comment34156919_22231721 – Lifely

Verwandte Themen