2009-02-19 4 views
2

Je pense que le titre est assez descriptif:iPhone + CGAffineTransFormRotate (pi/2) + statusBarHidden: OUI + presentModalViewController = 20 pixels d'espace blanc

-je effectuer tous les trois de ces opérations sur un point de vue, le résultat est de 20 pixels de l'espace blanc le long du côté gauche de l'écran (si la tenue de l'iPhone est landscapeLeft).

J'ai essayé de le réparer en effectuant une CGAffineTransFormTranslate (Transform, -20, 0)

qui vient de "diapositives" la vue sous les espaces blancs.

Cela commence à se sentir comme un bug, quelqu'un d'autre a ce problème?

Pour clarifier, je ne fais pas pivoter les vues. Je sens l'orientation du dispositif:

[[UIDevice currentDevice] orientation] 

Et si l'appareil (interface non) est dans le paysage, puis:

[navigationController presentModalViewController:NewView animated:NO] 

La transformation est de faire tourner mon point de vue (créé en IB) à paysage, avant de l'afficher.

Mon Transform code:

CGRect myFrame = CGRectMake(0, 0, 480, 320); 
    CGAffineTransform transform = [[self.myPeriodicTableViewController view] transform]; 
    transform = CGAffineTransformRotate(transform, degreesToRadians(rotationDirection * 90)); 
    transform = CGAffineTransformTranslate(transform, -20, 0); 
    [[self.myPeriodicTableViewController view] setFrame: myFrame]; 
    CGPoint center = CGPointMake(myFrame.size.height/2.0, myFrame.size.width/2.0); 
    [[self.myPeriodicTableViewController view] setTransform: transform]; 
    [[self.myPeriodicTableViewController view] setCenter: center]; 

Répondre

2

Ok, je l'ai compris. Comme d'habitude, c'était le résultat de plus d'un numéro. Ces problèmes se produisent tous avant que je pousse même le point de vue modal:

D'abord, dans mon code que je Redimensionnement moi comme ceci:

[self.view setFrame: [[UIScreen mainScreen] applicationFrame]]; 

Une fois que vous cachez la barre d'état, applicationFrame retourne toujours un 320x460 rect (pas 320x480). Je ne sais pas pourquoi, mais les correctifs suivants il:

[self.view setFrame: [[UIScreen mainScreen] bounds]]; 

Cela devient tout l'écran que je soulevai de:

Fullscreen UIView with Status bar and Navigation Bar overlay on the top

En second lieu, et dans la même ligne de code, je ne suis pas parler au viewController correct. Puisque je suis dans une application basée sur la navigation, je dois parler au contrôleur de navigation. Sinon, la barre de navigation n'obtient jamais le message pour se déplacer vers le haut de l'écran pour couvrir l'espace laissé par la barre d'état (qui a abouti à mon espace blanc). Donc, encore une correction à cette ligne de code:

[[self.navigationController view] setFrame: [[UIScreen mainScreen] bounds]]; 

Enfin, après tout cela, je peux pousser mon point de vue modal avec confiance.

6

Je pense que vous pourriez avoir besoin de recentrer votre centre:

// Set the center point of the view to the center point of the window's content area.  
self.view.center = CGPointMake(160.0, 240.0); 

C'est toute méthode init J'utilise pour les vues du paysage et fonctionne sans problème. Assurez-vous simplement de régler votre plume à la bonne taille aussi.

// Implement viewDidLoad to do additional setup after loading the view. 
- (void)viewDidLoad { 
    [super viewDidLoad]; 

    // Rotate to landscape 
    self.view.frame = CGRectMake(0, 0, 480.0, 320.0); 
    if ([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeRight) { 
    CGAffineTransform transform = self.view.transform; 

    // Set the center point of the view to the center point of the window's content area.  
    self.view.center = CGPointMake(160.0, 240.0); 

    // Rotate the view 90 degrees around its new center point. 
    transform = CGAffineTransformRotate(transform, (M_PI/2.0)); 
    self.view.transform = transform; 
    } 
} 
+0

Merci, je ajouté mon code de transformation, j'ai réinitialisé le centre. Peu importe comment je manipule le cadre, l'espace blanc "superpose" ma vue. Même si l'origine de ma vue est (0,0), l'espace blanc obscurcit ma vue. Cela ne semble pas être un problème avec la transformation, juste en mélangeant la barre d'état et les commandes de vue modale. –

+0

Je vérifie juste ma taille de NIB, et la largeur n'était que de 300, donc l'ai changé à 320. Le problème persiste. –

+0

Aussi mon code de transformation est dans mon délégué App, et est exécuté après le push. si je le fais dans viewDidLoad, j'obtiens des résultats impairs –

0

Aucun d'entre eux ne fonctionne pour moi. Quel travail DID était le suivant: J'ai déclaré une variable (globale) dans mon ViewController.fichier h

CGRect     contentRect; 

et dans mon ViewController.m à ma méthode de viewDidLoad J'initialize comme ceci:

contentRect = self.view.frame; 

puis, de rejeter le sélecteur, j'utilise

[self dismissModalViewControllerAnimated:YES]; // Or any other command 
    [self.view setFrame:contentRect]; // ta-da! all set back to normal. 
Questions connexes