Domanda

I have a table view with some words, and i present flash-card style landscape view when the device rotates. I made it by observing the "UIDeviceOrientationDidChangeNotification".

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(openLandscapeMode) name:@"UIDeviceOrientationDidChangeNotification" object:nil];

1)That works fine and smooth, but the problem is that when the we are in the landscape, i don't want the viewcontroller to react to the spinning around the vertical axis,so that i could lay the phone on the table and it would still be in the landscape. Maybe i should somehow observe the horizontall spinnings, instead of deviceorientation?

-(void)openLandscapeMode
{

    if([[UIDevice currentDevice]orientation]==UIDeviceOrientationLandscapeLeft||[[UIDevice currentDevice]orientation]==UIDeviceOrientationLandscapeRight)
    {
        LandscapeCardViewController *landscape = [[LandscapeCardViewController alloc]init];
        landscape.words = words;
        landscape.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
        [self presentModalViewController:landscape animated:YES];
        NSLog(@"Switch to %@",[[NSUserDefaults standardUserDefaults]valueForKey:@"ChosenWordInCard"]);
        [landscape release];
    }
    else
    {
        [self dismissModalViewControllerAnimated:YES];  
        [[UIApplication sharedApplication]setStatusBarOrientation:UIInterfaceOrientationPortrait];

    }
}

2)The second question is where to remove observer, if this controller is in a tab bar, and i want to perform the same transition in another controller in the same tabbar,but,of course,with another landscape view? I tried in viewWillDissappear, but it doesn't work properly. Thanks a lot!

È stato utile?

Soluzione 2

I found the solution I changed else to if([[UIDevice currentDevice]orientation]==UIDeviceOrientationPortrait||[[UIDevice currentDevice]orientation]==UIDeviceOrientationPortraitUpsideDown) and everything works fine! Strange, but it works!

About removing the observer - i do it in -viewWillAppear,checking,if i am not in landscape now.

Altri suggerimenti

For your first question, there should be a method in your viewcontroller which you may need to edit to only support portrait

-(BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation {
return UIInterfaceOrientationPortrait(interfaceOrientation); //only allow portrait
}

That will stop it auto rotating to landscape, while keeping your original method intact

For the second. What about when the transition is complete? Then re-add it when the view appears again. And then in your landscape controller, add it to re-detect when the device is portrait.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top