Ich habe eine kleine Verhaltensänderung zwischen 7.1 und 8 bei der Methode UIViewController shouldAutorotate
gefunden.
Der Apple -View-Controller-Programmierhandbuch gibt an, dass diese Methode aufgerufen wird, bevor eine Autorotation ausgeführt wird .
Allerdings habe ich bemerkt, dass wenn ich einfach shouldAutorotate (NO zurückgeben), die Methode auf Portrait aufgerufen wird - & gt; Landschaftsrotation, aber nicht auf der folgenden Landschaft - & gt; Portrait Rotation. Auch hier sollte die Methode immer so aufgerufen werden, wie ich sie verstehe. Dies tritt auf, wenn auf iOS 8, aber nicht auf iOS 7.1 ausgeführt wird.
Dies scheint mit einer neuen Methode im Aufruf-Stack in iOS8 zu tun zu haben:
[UIWindow shouldAutorotateToInterfaceOrientation:checkForDismissal:isRotationDisabled]
Ich konnte nicht finden Gibt es eine Beschreibung dieser Methode und ihres Verhaltens, irgendeine Idee, wo ich mehr Informationen über diese interne Methode finden könnte ?
Einfache Schritte, um dies zu reproduzieren:
Aktualisieren Sie Ihre ViewController.m
, um shouldAutorotate
Auf dem Simulator laufen iPhone 5s (7.1): shouldAutorotate
wird aufgerufen, wenn zu Landscape und zurück zu Portrait
shouldAutorotate
aufgerufen wird, wenn auf Landschaft Schalt aber es wird nicht genannt , wenn zurück zu Portrait Schalt Das Gleiche passierte mir. Ich habe das Gefühl, dass es einen Bug in iOS8 gibt, weil mein Code in iOS7 gut funktioniert hat. Auch als Benutzer hatte ich eine Menge Probleme mit dem Drehen in den Apps, die ich benutze. In 8% ruft co_de% auf, wenn du zur Seite drehst, aber nicht mehr, wenn du zu einer normalen Rotation zurückkehrst. Das ist, es sei denn, es hat tatsächlich eine Autorotation zur Seite gemacht, in welchem Fall es auf der Rückkehr heißt.
Es liegt also daran, dass Ihr 'shootAutorotate' immer 'NEIN' zurückgibt. Meine Annahme ist, dass sie aus irgendeinem Grund in iOS8 (die Apple-Programmierer, die dieses Verhalten geändert haben) entschieden haben, dass wenn sie ein NEIN bekommen, wenn sie zur Seite drehen, sie shootAutorotate nicht aufrufen müssen, wenn sie zum Portrait zurückkehren. Also hat es das Verhalten gebrochen, das wir erwartet hatten.
Niemand redet darüber oder beschwert sich. Google gibt für dieses genaue Szenario fast keine Ergebnisse zurück. Ich denke, das liegt daran, dass, um dies zu erreichen, Sie versuchen müssen, "shouldAutorotate" als Benachrichtigung über die Gerätendrehung zu verwenden, aber NICHT die Auto-Rotation-Funktionen des Betriebssystems verwenden. Zum Beispiel mache ich OpenGL-Spiele. Damit ich meine Engine kenne, um die Spielgrafik zu drehen. Aber ich verdrehe nicht meine Sichtweise. Ich denke nicht, dass viele Leute dies für Benachrichtigungen über Gerätedrehungen verwendeten.
Also habe ich mich entschieden, stattdessen Gerätebenachrichtigungen zu verwenden. In meiner Sicht Controller:
%Vor%Und um die Nachrichten zu erhalten:
%Vor%Und die Methode:
%Vor%Und dann zurück in meinem View-Controller habe ich alle Auto-Rotation Sachen auf Nein.
Tags und Links objective-c iphone ios