2013-04-16 13 views
5

Ho un pulsante nella mia app per visualizzare un SLComposeViewController da utilizzare con Twitter. Quando viene presentata la vista, si anima correttamente e scompare. Ho scoperto che quando scompare viene inviato sul retro della vista corrente e non ho modo di riportarlo indietro. Ho provato a inviare manualmente tutte le viste in alto alla parte posteriore nel codice senza fortuna. Sento che c'è qualcosa di fondamentalmente sbagliato nella mia app perché ciò avvenga in quanto questo comportamento è visto a qualsiasi livello dal controller di navigazione nell'app. Qui di seguito è uno screenshot del SLComposeViewController essere la barra di navigazione in app, ho fatto punto di vista della ViewController hanno un valore di Alpha di 0.0f per illustrare il mio punto:SLComposeViewController Visualizzazioni inviate all'app e non rispondono

enter image description here

Io davvero non so cosa sta succedendo qui e ogni aiuto sarà molto apprezzato. Il codice che sto usando per presentare il SLComposeViewController è abbastanza standard e ho provato in un'altra app e funziona bene:

NSString *message = [NSString stringWithFormat:@"#%@", [twitterInfo objectForKey:@"hashtag"]]; 

if ([appDelegate isSocialAvailable]) { 
    // code to tweet with SLComposeViewController 
    SLComposeViewController *twitter = [[SLComposeViewController alloc] init]; 
    twitter = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter]; 
    [twitter setInitialText:[NSString stringWithFormat: @"%@", message]]; 
    [self presentViewController:twitter animated:YES completion:nil];   
} 
+0

Sei sicuro che questo codice viene chiamato dal mainThread? Se non possono apparire cose oscure. Hai qualche codice che allontana il VC? –

+0

Sì, è nel thread principale, ho provato a eseguire questo codice sul Root del NavigationController nell'app con lo stesso errore. – SamRowley

+0

quindi '[self.navigationController presentViewController: animated: completion:];' non funziona? –

risposta

1

Grazie per aver postato questo, ho avuto la stessa cosa perché ho aggiunto un CAShapeLayer alla mia finestra per un effetto sfumato. Il tuo post mi ha aiutato a capire che questo era il problema.

Sembra che questo stia succedendo è perché stanno aggiungendo il loro livello di visualizzazione ai sottolivelli della finestra - all'indice 0 Potrei aggiungere! Ciò è contrario a ciò che ci si aspetterebbe, il che è che aggiungerebbero il proprio punto di vista come sottomenu alla vista del controller di visualizzazione che presenta.

Devono aver pensato che le persone non aggiungono livelli alla loro finestra e vogliono assicurarsi che non siano in competizione con lo stack di visualizzazione. Perché dovrebbero metterlo nell'indice 0 deve essere solo perché qualcuno ha l'abitudine di fare -[CALayer insertLayer:layer atIndex:0] suppongo.

Non sono sicuro ma immagino che questo potrebbe essere il caso con qualsiasi controller di visualizzazione modale.

La correzione è piuttosto semplice:

[viewController presentViewController:facebookViewController 
          animated:YES 
          completion:^{ 
    facebookViewController.view.layer.zPosition = 1000; 
}]; 
+0

Grazie per la risposta, sono contento di poterti aiutare per la tua strada, l'ho cambiato in modo che la tua risposta sia accettata perché è più dettagliata della mia. – SamRowley

0

Dopo una settimana di strappare i capelli fuori per trovare una soluzione a questo ho trovato il colpevole codice nella app, un piccolo trucco per arrotondare gli angoli di tutto l'app, così fanno sembrare gli angoli sono arrotondati con l'aggiunta di un'immagine non:

UIImage *bottomOverlayImage = [UIImage imageNamed:@"bottom_overlay.png"]; 
CALayer *bottomOverlay = [CALayer layer]; 
bottomOverlay.frame = CGRectMake(0, self.window.frame.size.height - 9, bottomOverlayImage.size.width, bottomOverlayImage.size.height); 
bottomOverlay.contents = (id)bottomOverlayImage.CGImage; 
bottomOverlay.zPosition = 1; 
[self.window.layer addSublayer:bottomOverlay]; 

Se qualcuno mi potrebbe dire il motivo per cui questo codice sarebbe rovinare la vista Twitter che sarebbe davvero utile per riferimento futuro. Questo codice è stato inserito nel delegato dell'app ed eseguito al primo caricamento.

Problemi correlati