2012-03-14 1 views
0

Когда я обедаю свое приложение, и я вращаю iPhone в ландшафте Я загружаю другой вид (вид справки). Теперь, если я перехожу к другому виду через одну из кнопок, присутствующих в главном представлении, и я поворачиваю iPhone, появляется окно справки ... Я хотел бы знать, как сделать, чтобы загрузить представление справки только тогда, м в первом представлении. Вот мой .m код:Как использовать rejectModalViewControllerAnimated

@implementation Home 
@synthesize ruota; 
@synthesize portraitView,landscapeView; 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
if (self) { 
    // Custom initialization 
} 
return self; 
} 

- (void)didReceiveMemoryWarning 
{ 
// Releases the view if it doesn't have a superview. 
[super didReceiveMemoryWarning]; 

// Release any cached data, images, etc that aren't in use. 
} 

#pragma mark - View lifecycle 

/* 
// Implement loadView to create a view hierarchy programmatically, without using a nib. 
- (void)loadView 
{ 
} 
*/ 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 
[[NSNotificationCenter defaultCenter] addObserver:self 
selector:@selector(orientationChanged:)name:@"UIDeviceOrientationDidChangeNotification" 
object:nil]; 
[self performSelector:@selector (ritardo) withObject:nil afterDelay:5.0f]; 
} 


-(void)orientationChanged:(NSNotification *)object{ 
UIDeviceOrientation deviceOrientation = [[object object] orientation]; 
if (deviceOrientation == UIInterfaceOrientationPortrait) 
{ 
    [UIView beginAnimations:@"View Flip" context:nil]; 
    [UIView setAnimationDuration:0.5f]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseIn]; 
    self.view = self.portraitView; 
    [UIView commitAnimations]; 
    [self dismissModalViewControllerAnimated:YES]; 
} else if (deviceOrientation == UIInterfaceOrientationLandscapeLeft || 
deviceOrientation == UIInterfaceOrientationLandscapeRight) { 
    [UIView beginAnimations:@"View Flip" context:nil]; 
    [UIView setAnimationDuration:0.5f]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseIn]; 
    self.view = self.landscapeView; 
    [UIView commitAnimations]; 
    [self dismissModalViewControllerAnimated:YES]; 
} 
} 

-(void) ritardo { 
ruota.image = [UIImage imageNamed:@"RuotaPerAiuto.png"];  
} 

- (void)viewDidUnload 
{ 
[self setPortraitView:nil]; 
[self setLandscapeView:nil]; 
[self setRuota:nil]; 
[super viewDidUnload]; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation: 
(UIInterfaceOrientation)interfaceOrientation 
{ 
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 
} else { 
    return YES; 
} 
} 
@end 

EDIT:

-(void)orientationChanged:(NSNotification *)object{ 
UIDeviceOrientation deviceOrientation = [[object object] orientation]; 
if (deviceOrientation == UIInterfaceOrientationPortrait) 
{ 
    if (self.isViewLoaded && self.view.window) 
    { 
    [UIView beginAnimations:@"View Flip" context:nil]; 
    [UIView setAnimationDuration:0.5f]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseIn]; 
    self.view = self.portraitView; 
    [UIView commitAnimations]; 
    [self dismissModalViewControllerAnimated:YES]; 
    }  
} 

else if (deviceOrientation == UIInterfaceOrientationLandscapeLeft || deviceOrientation 
== UIInterfaceOrientationLandscapeRight) 
{ 
    if (self.isViewLoaded && self.view.window) 
    { 
    [UIView beginAnimations:@"View Flip" context:nil]; 
    [UIView setAnimationDuration:0.5f]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseIn]; 
    self.view = self.landscapeView; 
    [UIView commitAnimations]; 
    [self dismissModalViewControllerAnimated:YES]; 
    } 
} 
} 

ответ

0

Может быть, вы могли бы сделать это путем проверки внутри метода orientationChanged: виден ли ваш первый контроллер представления, а затем только показывая свой модальный экран помощи когда это правда:

-(void)orientationChanged:(NSNotification *)object 
{ 
    UIDeviceOrientation deviceOrientation = [[object object] orientation]; 
    if (deviceOrientation == UIInterfaceOrientationPortrait) 
    { 
     // check if this view controller is visible 
     if (self.isViewLoaded && self.view.window) { 

      // then show modal help view controller 
     } 
    } 
} 

КСТАТИ я нашел кончик, как проверить, виден ли здесь контроллер вид: How to tell if UIViewController's view is visible

+0

Спасибо за ваш ответ. Я редактировал мой код выше, и теперь, когда с первого взгляда я перехожу на другой, и я помещаю в альбом, нет справки. Хорошо. Но когда я возвращаюсь домой, и я помещаю в пейзаж, появляется последний вид. Странное поведение – Enzoses