2010-12-07 7 views
1

Ich würde gerne einen benutzerdefinierten Orientierungssperrknopf für eine Leser-App von mir machen, und ich dachte, es wäre nicht zu schlecht, um zu peitschen, aber leider werde ich derjenige, der geschlagen wird.Wie kann ich eine benutzerdefinierte Ausrichtung sperren Aktion?

Um zu beginnen ich diese Methode zu tun haben:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
return YES; 
} 

Und dann denke ich, dass ich die eigentliche Verriegelung in einem Action-Methode wie folgt umgehen konnte:

- (IBAction) screenLock:(id)sender{ 

if([UIDevice currentDevice].orientation == UIDeviceOrientationPortrait){ 

    [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortrait]; 

}else{ 

      [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight]; 

} 

    } 

Aber ach, diese Code wird nicht über den ehemaligen Einfluss, der die Ansicht anweist, zu rotieren ...

Ich gehe das alles falsch? Was ist ein besserer Weg, es zu tun? Ich möchte nur lokale, einfache Möglichkeit haben, meine Benutzer die Ausrichtung ihres Bildschirms sperren zu lassen. Ich denke, es wäre ein boolescher Wert, wo sie eine Taste drücken, um zu sperren und dann wieder zu drücken, um zu entsperren ...

Gedanken? Danke !!

Antwort

3

shouldAutorotateToInterfaceOrientation Wellen Ihrer Ansicht Hierarchie so Ihre Logik setzen in AppDelegate (das Macht Rückkehr JA oder als oberster Viewcontroller) werden muss. Legen Sie eine BOOL Eigenschaft in Ihrem AppDelegate und legen Sie es über Ihre Lock-Taste (zB Zielzeiger/delegates (AppDelegate)) dann in Ihrem AppDelegate etwas tun, wie folgt aus:

#define ROTATION_MASTER_ENABLED 1 

//Setting MASTER_ROTATION_LOCK_ENABLED to 0 will stop the device rotating 
//Landscape UP>landscape DOWN and Portrait UP>Portrait DOWN, 
//This is not generally desired or app store safe, default = 1 

-(BOOL)compareOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 

    UIInterfaceOrientation actual = [[UIDevice currentDevice] orientation]; 
    if(UIInterfaceOrientationIsLandscape(interfaceOrientation) && UIInterfaceOrientationIsLandscape(actual))return YES; 
    else if(UIInterfaceOrientationIsPortrait(interfaceOrientation)&& UIInterfaceOrientationIsPortrait(actual))return YES; 
    else return NO; 

} 


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    if(!MASTER_ROTATION_LOCK_ENABLED)return NO; 
    else if(self.rotationEnabled || [self compareOrientation:interfaceOrientation])return YES; 
    return NO;//self.rotationEnabled is a BOOL 
} 
+1

Nr Diese Methode sollte JA Rückkehr für die unterstützten Ausrichtungen - was in Ihrem Fall entweder immer JA oder immer NEIN zurückgibt. – Eiko

+0

@Eiko, die Art, wie es derzeit geschrieben wird, erlaubt dem View-Controller, sich in jede Richtung zu drehen (indem JA zurückgegeben wird, wenn die Sperre nicht aktiviert ist) und zu verhindern, dass er sich dreht, wenn die Sperre aktiviert ist. Ich verstehe nicht, warum das einen Downvote verdient? – Jasarien

+0

Eiko hatte Recht, obwohl ich einen Fix bearbeitet habe. –