2014-09-05 10 views
6

enter image description here Ho creato una categoria per la rotazione della vista e ho aggiunto viste sulla vista del controller e sulla finestra (per mostrare l'indicatore personalizzato). Il mio codice funziona bene fino a 7.X con xCode 5.X e xCode6-beta6. Ma non è corretto con IOS 8 beta. Sembra che la rotazione di Windows non funzioni con ios 8 beta come gli ios più vecchi.Problema di rotazione con iOS 8 per la vista che viene aggiunta a windows

Potete per favore suggerirmi .... Grazie mille in anticipo.

Il mio codice è assomigliare

- (void)application:(UIApplication *)application willChangeStatusBarOrientation:(UIInterfaceOrientation)newStatusBarOrientation duration:(NSTimeInterval)duration { 
if(!self.isIpad) 
{ 

    [menu.view rotateViewToOrientation:newStatusBarOrientation animated:YES]; 
    if(newStatusBarOrientation==UIInterfaceOrientationPortrait || newStatusBarOrientation==UIInterfaceOrientationPortraitUpsideDown) 
    { 
     if (IS_IPHONE_5) { 
      menu.view.frame= CGRectMake(0, 518, 320, 50); 
     } else { 
      menu.view.frame= CGRectMake(0, 430, 320, 50); 
     } 

    } else if(newStatusBarOrientation==UIInterfaceOrientationLandscapeLeft) { 

     if (IS_IPHONE_5) { 
      menu.view.frame= CGRectMake(270,0,50,568); 
     } else { 
      menu.view.frame= CGRectMake(270,0,50,480); 
     } 

    } else { 

     if (IS_IPHONE_5) { 
      menu.view.frame= CGRectMake(0,0,50,568); 
     } else { 
      menu.view.frame= CGRectMake(0,0,50,480); 
     } 
    } 
    [menu reloadMenu]; 
    } 
} 


//Method of Menu Class for orientation change setup 
- (void)rotateViewToOrientation:(UIInterfaceOrientation)orientation animated:(BOOL)animated { 
CGPoint center = self.center; 
CGRect bounds = self.bounds; 
CGAffineTransform transform = CGAffineTransformIdentity; 
int intOri=orientation; 
switch (intOri) { 
    case UIInterfaceOrientationPortraitUpsideDown: 
     transform = CGAffineTransformMakeRotation(M_PI); 
     break; 
    case UIInterfaceOrientationLandscapeLeft: 
     transform = CGAffineTransformMakeRotation(-M_PI_2); 
     break; 
    case UIInterfaceOrientationLandscapeRight: 
     transform = CGAffineTransformMakeRotation(M_PI_2); 
     break; 
    case UIInterfaceOrientationPortrait: 
     transform = CGAffineTransformMakeRotation(0); 
     break; 

} 
if (animated) { 
    [UIView beginAnimations:nil context:nil]; 
} 
self.transform = transform; 
bounds = CGRectApplyAffineTransform(bounds, transform); 
self.bounds = CGRectMake(0, 0, bounds.size.width, bounds.size.height); 
self.center = center; 
if (animated) { 
    [UIView commitAnimations]; 
} 
} 
+0

incollare un codice e mostrare come ottenere è problema, c'è qualche funzione non sta chiamando o qualsiasi altra cosa ?? – Jageen

+0

in generale la maggior parte degli sviluppatori non ha idea di come si debba costruire una corretta gerarchia delle viste e che possa essere l'origine del problema - potresti pubblicare del codice su come costruisci il tuo? – holex

+0

@Jageen Ho aggiunto il mio codice, puoi suggerirmi in qualsiasi modo, Cosa dovrei seguire per rendere compatibile la mia applicazione iOS 8. –

risposta

7

Ho provato un sacco di correzioni ... e il suo lavoro con la patch come

{ 
[self.window setBounds:temp]; 
[menu.view setFrame:CGRectMake(0, self.window.frame.size.height-50, self.window.frame.size.width, 50)]; 
[menu.view removeFromSuperview]; 
[self.window addSubview:menu.view]; 
[self.window makeKeyAndVisible]; 
} 

e reseting l'angolo a 0 gradi per CGAffineTransformMakeRotation per tutti i tipi della modalità dispositivo., per ios 8.

Questa non è una soluzione adeguata, lo so, ma non ho alcun modo alternativo in attesa di una buona risposta.

+0

u uomo cullato. :) – NaXir

+0

Dove si inserisce questo codice? – ahalls

4

Nel mio caso, è sufficiente impostare l'angolo di rotazione su 0 per tutti gli orientamenti risolto il problema. Prima di iOS 8 le coordinate UIWindow erano sempre orientate in verticale, quindi dovevi gestire la rotazione da solo. Questo non è più necessario in iOS 8. Per quanto riguarda il motivo per cui dovresti aggiungere UIViews a un UIWindow, lo faccio per gli avvisi che voglio visualizzare sopra a tutto il resto, indipendentemente dalla gerarchia delle viste correnti.

1

Aveva un problema simile. Sorprendentemente la soluzione era quella di commentare tutto il codice relativo a self.window su Appdelegate.

Inizializzazione commentata di self.finestra e sua assegnazione. Imposta la vista iniziale nello storyboard nella finestra di ispezione Attributi selezionando la casella di controllo "È il controller della vista iniziale".

Nuova soluzione migliore
Commentando self.window stava causando altre questioni. Invece il codice qui sotto è la cosa migliore:

- (void)applicationDidChangeStatusBarOrientation:(NSNotification *)notification 
    { 
     [UIViewController attemptRotationToDeviceOrientation]; 
    } 
Problemi correlati