5

La mia app ha un controller di visualizzazione che non può cambiare orientamento. Pensalo come un campo da gioco che deve rimanere fisso sul posto.Forzare UIActionSheet per utilizzare un orientamento specifico

Ora desidero creare un UIActionSheet, ma dato il modo in cui l'utente ha in mano il dispositivo, vorrei abbinare il foglio all'orientamento.

Sembra che l'UIActionSheet, a differenza, ad esempio, il MFComposerViewController, non ottiene il suo orientamento dalla StatusBar, che sto rotante sulla base dell'orientamento, ma ottiene il suo orientamento dal controller della vista sottostante. In altre parole, UIActionSheet viene visualizzato con orientamento verticale, indipendentemente da come viene tenuto il dispositivo.

ho provato:

CGAffineTransform t = CGAffineTransformMakeRotation(lastUIAngle); 
[actionSheet setTransform:t]; 
if (UIInterfaceOrientationIsLandscape(lastOrientation)) 
    actionSheet.frame = CGRectMake(0, 0, 480, 320); 
else 
    actionSheet.frame = CGRectMake(0, 0, 320, 480); 
actionSheet.center = self.view.center; 

E riesco a ottenere il giusto orientamento, ma il foglio azione risultante esce dal lato ritratto, ed è dimensionata come se fosse ancora in orientamento verticale. Il frame del foglio di azione viene calcolato in base al numero di pulsanti, ecc.

Qualcuno è riuscito a forzare UIActionSheet a visualizzare correttamente in un orientamento specificato?

(Ho anche provato a creare una nuova vista, che è stata trasformata e aveva le dimensioni corrette, ma UIActionSheet lo ha ignorato.quel che rimane è creare un nuovo UIViewController che ruota automaticamente e UIActionSheet ne è figlio. , ciò significa che il mio campo di gioco viene completamente oscurato dal nuovo controller di visualizzazione.)

risposta

7

Risulta che la risposta è stata piuttosto semplice. Aggiungere questo codice per forzare UIActionSheets a qualsiasi orientamento vuoi:

tempView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)]; 
tempView.transform = CGAffineTransformMakeRotation(lastUIAngle); 
tempView.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height); 
[self.view.window addSubview:tempView]; 

UIActionSheet *actionSheet = ... 

[actionSheet showInView:tempView]; 

lastUIAngle è un multiplo di pi greco/2, che, in questo caso, avevo salvato l'ultima volta l'orientamento è stato modificato.

+2

non funziona per me in iOS 6 – SpaceDog

+0

Hai ragione. iOS 6 ha rotto questo. Sto cercando una soluzione. – mahboudz

+2

iOS 6 ha rotto un sacco di cose, ad esempio l'autorotazione, specialmente se si compila per 4.x ed eseguito su un dispositivo 6.x.Alcune app semplicemente non eseguono l'autorotazione come previsto. Probabilmente il problema con il tuo codice si rompe e questa roba autorotato ha qualche relazione. – SpaceDog

0

Verificare questa alternativa ->JonasGessner/JGActionSheet se non ti dispiace il layout di base, oppure puoi modificarlo nel codice src.

Questo ha funzionato per me su iOS 8.0.2. Proprio come di seguito:

  1. Includilo nel tuo progetto.

Copia JGActionSheet.h e JGActionSheet.m a voi proiettare

  1. importarlo in cui si sta andando ad utilizzare un foglio di azione.

#import "JGActionSheet.h"

  1. usarlo.

codice di esempio:

JGActionSheetSection *menuSection = [JGActionSheetSection sectionWithTitle:nil message:@"Select Food" buttonTitles:@[@"Hamburger", @"Toast", @"Rice"] buttonStyle:JGActionSheetButtonStyleDefault]; 
[menuSection setButtonStyle:JGActionSheetButtonStyleRed forButtonAtIndex:0]; 

JGActionSheetSection *cancelSection = [JGActionSheetSection sectionWithTitle:nil message:nil buttonTitles:@[@"Cancel"] buttonStyle:JGActionSheetButtonStyleCancel]; 

NSArray *sections = @[menuSection, cancelSection]; 
JGActionSheet *sheet = [JGActionSheet actionSheetWithSections:sections]; 

[sheet setButtonPressedBlock:^(JGActionSheet *sheet, NSIndexPath *indexPath) { 
    [sheet dismissAnimated:YES]; 
}]; 

// Set specific orientation to action sheet 
sheet.transform = CGAffineTransformMakeRotation(M_PI); 

[sheet showInView:self.view animated:YES]; 
Problemi correlati