Drehen, um Landschaft für Ansichten der Hierarchie manuell hinzugefügt (iPhone)
-
20-09-2019 - |
Frage
Ich habe einen einfachen UIViewController, die eine XIB für seine Schnittstelle verwendet.
Als solche umfasst die Schnittstelle einfach eine UIView, ein UIActivityIndicator und eine UILabel. Ich habe die Dimensionierung Einschränkungen im Interface Builder stellen Sie die Aktivitätsanzeige zu halten und das Etikett zentriert, wenn die Ansicht dreht.
Die UIViewController gesetzt JA für Hoch- und Querformat in der -shouldAutorotateToInterfaceOrientation:
Methode zurückzukehren.
Die Ansicht auf die Ansichtshierarchie hinzugefügt werden manuell, mit
if (!activityOverlay)
activityOverlay = [[XBActivityOverlayViewController alloc] initWithNibName:@"XBActivityOverlayViewController" bundle:nil message:@"Connecting..."];
[activityOverlay.view setAlpha:0.0f];
[self.window addSubview:activityOverlay.view];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.3f];
[activityOverlay.view setAlpha:0.9f];
[UIView commitAnimations];
Das Problem, das ich habe, ist, dass, wenn das Gerät bereits im Querformat ist und der Blick ist an dieser Stelle der Hierarchie hinzugefügt, wobei die Ansicht immer noch im Hochformat ist, und nicht automatisch drehen.
Was muß ich tun, um die Ansicht in der gleichen Ausrichtung wie die übergeordneten Ansicht hinzufügen?
Lösung
Ich weiß nicht, ob es die richtige Antwort auf Ihre Frage, aber ich hoffe, hilft gerne weiter:
Für mich jedes Mal wenn ich hinzufügen / modal entlassen oder eine neue Ansicht angezeigt wird, wird die folgende Funktion aufgerufen:
-(void) detectOrientation
{
if (([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft) ||
([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight))
{
item1.frame = CGRectMake(147.0, 241.0, 56.0, 28.0);
item2.frame = CGRectMake(265.0, 241.0, 56.0, 28.0);
}
else if (([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait) ||
([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortraitUpsideDown) || !inLandscapeOrientation)
{
item1.frame = CGRectMake(35.0, 425.0, 35.0, 28.0);
item2.frame = CGRectMake(176.0, 425.0, 35.0, 28.0);
}
}
Hier ändern Sie die Position entsprechend der aktuellen Ausrichtung des Geräts. Vielleicht, wenn Sie, dass die aktuelle Ausrichtung erkennen ist Landschaft fügen Sie eine Subview, die eine solche Orientierung hat.
Alejandra:)