2016-05-13 15 views
1

Ich habe zwei UIViews in meinem UIViewController. Ich möchte, dass sich einer dreht und der andere gesperrt wird. Grundsätzlich kann ein UIView von Portrait und Landscape wechseln, während der andere im "Portrait" -Modus fixiert ist.Zwei separate UIView Rotationen

Zuerst habe ich versucht mit shouldAutorotate aber dann habe ich festgestellt, dass das für alles gilt, was zu der UIViewController gehört. Dann habe ich versucht, zwei UIViewController s (die übrigens gut für das Rotationsproblem funktioniert), aber ich habe AVCaptureSession gehen in einem View-Controller und ich wollte nicht die Kamera Eingang verbinden und initialisieren die Sitzung jedes Mal.

Gibt es eine Möglichkeit für mich, eine drehen zu lassen, während die andere gesperrt ist?

Danke!

Antwort

0

ALRIGHT es hat mich wie einen ganzen Monat und eine Hälfte, es herauszufinden, aber hier ist meine Lösung:

Es ist ziemlich schwer, jedes Mal für alle separaten UIViews Umdrehungen Buchhaltung zu halten das Gerät dreht sich, also ging ich zurück zu den zwei UIViewControllers Ansatz.

Diesmal entschied ich mich, eine UINavigationController als Root-View-Controller zu haben und ich unterklassifiziert. Ich habe eine NSNumber Variable in meiner Interface-Klasse festgelegt, um 2 oder mehr View-Controller zu berücksichtigen, die ein Benutzer haben könnte. In meinem Fall würde ich jedoch nur wirklich zwischen 0 und 1 wechseln. Außerdem übertrumpfte ich shouldAutoRotate und supportedInterfaceOrientations, um unterschiedliche Eigenschaften gemäß der NSNumber Variable zu haben.

Bevor es weiter zu erklären, ich werde meinen Code schreiben ...

Das ist mein Interface-Klasse ist:

@interface MasterNavigationController : UINavigationController 

@property (strong, nonatomic) NSNumber *num; 

@end 

Und meine Implementierungsklasse:

#import "MasterNavigationController.h" 

@implementation MasterNavigationController 

- (BOOL)shouldAutorotate { 
    if ([_num isEqualToNumber:[NSNumber numberWithInt:0]]) return NO; 
    return YES; 
} 

- (UIInterfaceOrientationMask)supportedInterfaceOrientations { 
    if ([_num isEqualToNumber:[NSNumber numberWithInt:0]]) return UIInterfaceOrientationMaskPortrait; 
    return [[self topViewController] supportedInterfaceOrientations];; 
} 

@end 

Immer, wenn ich war in meinem UIViewController, dass ich nicht rotieren wollte, würde die NSNumber Variable auf 0 gesetzt werden. So würde der Navigationscontroller in der Lage sein zu sagen, ob es automatisch sein sollte rotieren oder nicht. Dann, als der Navigationscontroller den nächsten View-Controller schob, der sich drehen kann, setzte ich die Variable NSNumber auf 1, und der Navigationscontroller konnte wissen, dass er automatisch rotieren sollte. Das ist großartig, denn immer, wenn es zum Controller mit nicht rotierender Ansicht zurückgeschoben wurde, wusste es, dass es sich neu orientieren musste, ohne dass alles kaputtging.

Hoffe, das hilft jedem, der damit Probleme hat !!! Es hat so lange gedauert, das herauszufinden.

1

Sie können es mit shouldAutorotate ich denke. wenn das Gerät ändern Sie die Ausrichtung Ihre beide Ansicht dann erhalten dreht manuell feste Ansicht mit Ausgangsposition drehen, indem Sie so etwas wie unter Verwendung von transformieren,

myView.transform = CGAffineTransformMakeRotation(M_PI_2); 

Sie delegieren wie unten verwenden können Ihre manuelle Drehung

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
    // do something before rotation 
} 
auszuführen

oder

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
{ 
    // do something after rotation 
} 

Update:

beziehen Sie sich auf this answer für deaktivieren Animation! Hope this helfen :)

+0

Ist es möglich, die Animation für die Rotation zu deaktivieren? Danke, ich werde das heute später ausprobieren –

+1

überprüfe mein Update in Antwort auf die Deaktivierung der Animation – Lion

+0

AKTUELL nur herausgefunden, ich habe einen zu drehen und den anderen zu beheben, während 'shouldAutorotate' auf' NEIN' gesetzt ist. Die gedrehte Ansicht bleibt jetzt jedoch im Hochformat (es wird nur ein Porträt gedreht). Wie behebe ich das? –