So verhindern Sie das manuelle Zoomen in UIScrollView

8

Hoffentlich kann jemand mit diesem Problem helfen. Ich habe eine Klasse, die von UIScrollView abgeleitet ist, und ich möchte verhindern, dass der Benutzer über manuelle Pinch- und Swipe-Gesten zoomen oder blättern kann. Die gesamte Ansichtsnavigation wird statt dessen durch programmatische Mittel in Abhängigkeit davon gesteuert, wo ein Benutzer tippt (man denke an einen Ebook-Reader, bei dem durch Antippen der linken oder rechten Seite der Anzeige die Ansicht um genau eine Seitenbreite scrollt). Irgendwelche Vorschläge zur Umsetzung?

    
Shinohara 16.01.2011, 09:07
quelle

5 Antworten

9

Auf deinem - (void)viewDidLoad; solltest du einfach den gewünschten Gestenerkenner deaktivieren können. In diesem Fall:

%Vor%

oder

%Vor%

Ich mache das manchmal von View-Controllern, die UIScrollViews enthalten. Ich ziele nur auf die Bildlaufansicht ( self.scrollView.pinchGestureRecognizer ) und vorübergehend Gesten deaktivieren, wenn die App. ist in einem bestimmten Zustand.

    
Joony 13.04.2012 11:46
quelle
7

Um zu verhindern, dass Benutzer-Controller zoomen und schwenken, aber dennoch programmgesteuertes Zoomen und Verschieben eines Bildlaufs ermöglichen, besteht die beste Methode darin, die -addGestureRecognizer: -Methode von UIScrollView in einer Unterklasse zu überschreiben. In meiner Verwendung wollte ich alle Erkenner blockieren und den sichtbaren Bereich vollständig von meinem View-Controller aus steuern, ich tat es so:

%Vor%

Jede Gestenerkennung wird einfach deaktiviert, um eine feinere Steuerung zu ermöglichen (die Schwenksteuerung zuzulassen, aber z. B. nur durch Doppeltippen zu zoomen). Sie würden einfach den eingehenden Gestenerkenner über -isKindOfClass: überprüfen und gegebenenfalls deaktivieren.

%Vor%

Ich habe diese Methode in einer App zum Lesen von Comics verwendet, bei der die animierte Navigation zwischen beschnittenen Feldern auf einer Seite mit der vollständigen Seite in einem UIScrollView verwendet wird. Durch einfaches Einstellen der Ansicht kann ich einen ausgewählten Bereich problemlos vergrößern und verkleinern Grenzen zu der Region, die ich anzeigen möchte.

    
Shinohara 23.07.2011 06:13
quelle
4

Eine kurze Notiz hier. Es scheint, dass UIScrollView s panGestureRecognizer und pinchGestureRecognizer beide aktiviert sind, wenn ein View-Controller das erste Mal einem Fenster hinzugefügt wird.

Grundsätzlich bedeutet das, dass sie in enabled = NO in viewDidLoad gesetzt werden. Ich habe mein enabled = NO nach viewWillAppear: verschoben und es blieb hängen. :)

    
Kenny Winker 26.02.2014 04:31
quelle
1

Ich habe nicht allzu viel Erfahrung mit UIScrollView s, aber wenn ich mir die Dokumente ansehe, sieht es so aus, als könnten Sie maximumZoomScale , minimumZoomScale und scrollEnabled einstellen, um alles zu deaktivieren, was Sie deaktivieren möchten / p>

Hier finden Sie die Dokumentation: Ссылка

Aus der Dokumentation:

scrollEnabled :

  

Wenn der Wert dieser Eigenschaft JA ist,   Scrollen ist aktiviert, und wenn es NEIN ist   Scrollen ist deaktiviert. Der Standard   ist JA.

     

Wenn der Bildlauf deaktiviert ist, blättern Sie   Die Ansicht akzeptiert keine Berührungsereignisse. es   leitet sie die Antwortkette hinauf.

maximumZoomScale :

  

Dieser Wert bestimmt, wie groß der   Inhalt kann skaliert werden. Es muss sein   größer als die minimale Zoomskala   zum Zoomen, um aktiviert zu werden. Der Standard   Wert ist 1.0.

    
donkim 16.01.2011 09:09
quelle
1

Überschreiben Sie in Ihrer UIScrollView-Unterklasse auch die setZoomScale: -Methode, die die Geste automatisch wieder deaktiviert

%Vor%     
Sandro Vezzali 06.03.2014 13:09
quelle

Tags und Links

Django: Verwenden von Annotate, Count und Distinct in einem Queryset ___ qstntxt ___

Ich möchte die Position der Ansicht auf dem Bildschirm finden.

Dafür verwende ich die Methoden wie %code% , %code% , %code% , %code% . Aber leider werden alle diese Methoden %code% zurückgegeben.
Gibt es alternative Möglichkeiten, die Positionen der Ansicht zu finden (z. B. Koordinaten auf dem Bildschirm)?

Mein Layout %code% :

%Vor%

Und meine Klasse hat das in %code% :

%Vor%     
___ answer17856105 ___

Die Methoden, die Sie geschrieben haben, reichen aus finde den Ort auf dem Bildschirm, aber der Ort, an dem du geschrieben hast, ist nicht korrekt.

Versuchen Sie, die Methoden (view.getLeft (), view.getTop () ... usw.) in onWindowFocusChanged (boolean hasFocus) -Methode zu schreiben.

zum Beispiel ...

**

%Vor%

**

Es wird Ihr Problem lösen.

    
___ answer4862610 ___

Ich bin nicht sicher, ob Sie die Position der Ansicht erhalten können, bevor die Layout-Phase durchgeführt wurde. Sobald die Ansicht geöffnet ist, können Sie %code% verwenden, um die Position der Ansicht zu erhalten. %code% und ähnlich gibt nur die Position der Ansicht im übergeordneten Element zurück.

    
___ tag123android ___ Android ist das mobile Betriebssystem von Google, das zum Programmieren oder Entwickeln von digitalen Geräten (Smartphones, Tablets, Automobile, Fernseher, Wear, Glass, IoT) verwendet wird. Verwenden Sie für Themen rund um Android Android-spezifische Tags wie android-intent, nicht intent, android-activity, nicht activity, android-adapter, nicht adapter usw. Bei anderen Fragen als der Entwicklung oder Programmierung, aber im Zusammenhang mit Android Framework, verwenden Sie Der Link: https://android.stackexchange.com. ___ tag123androidlayout ___ Ein Layout definiert die visuelle Struktur für eine Benutzeroberfläche, z. B. die Benutzeroberfläche für ein Aktivitäts-, Fragment- oder App-Widget. ___ tag123androidview ___ Fragen zu Ansichten in Android. Ansichten können in Android Layout XML oder in Java-Code definiert werden. Fragen, die dieses Tag verwenden, umfassen allgemeine Ansichtspraktiken oder Hinweise. Informationen zu bestimmten Ansichten finden Sie in der Info zu diesem Tag. Bei Fragen zum Layout verwenden Sie [Tag: Android-Layout]. ___ answer23196868 ___

Der einfachste Weg ist, es zu benutzen %code% ODER %code%

Und wenn Sie eine Position relativ zum root Layou t möchten, Siehe

    
___ answer4945979 ___

Verwenden Sie %code% , %code% , %code% und %code% . Diese können verwendet werden, nachdem die Ansicht instanziiert wurde.

    
___ answer14205835 ___

Sie können wirklich nicht die Aussicht vor der Hand bekommen. Möglicherweise möchten Sie eine explizite Verwendung von %code% vornehmen, wenn dies möglich ist, oder Sie können dies in der Funktion %code% oder %code% überprüfen.

Wenn Sie nur Dinge ausprobiert haben und Spaß mit Threads haben möchten, wird dieser Code-Block Ihren Code auf den UI-Thread setzen und darauf warten, dass alles gerendert wird und dann Ihren Code anzeigen:

%Vor%

Das letzte ist ziemlich schweres Heben, aber es wird die Arbeit erledigt. Normalerweise lege ich solche Zeilen in meine Logs (zB %code% )

    
___