центральный вид не работает - PullRequest
0 голосов
/ 21 декабря 2011

Я пытаюсь центрировать вид, который отображается в моем приложении для iPad, в зависимости от ориентации интерфейса.Это не работает, представление всегда смещается в зависимости от того, в какой ориентации запущено приложение.

Я искал Stackoverflow в течение 2 часов, пробовал разные методы, но не смог заставить его работать.

Вот как я отображаю представление из корневого представления:

publicationDownload = [[PublicationDownloadController alloc] init];
// Setting up propertys to load Publication-related information
[publicationDownload setDelegate:self];
[publicationDownload setThePubID:[NSNumber numberWithInt:[sender tag]]];

publicationDownload.view.opaque = NO;
publicationDownload.view.backgroundColor = [UIColor clearColor];
[publicationDownload.theUIView.layer setCornerRadius:5];
[publicationDownload.theUIView.layer setShadowColor:[UIColor blackColor].CGColor];
[publicationDownload.theUIView.layer setShadowOpacity:0.5];
[publicationDownload.theUIView.layer setShadowRadius:5];
[publicationDownload.theUIView.layer setShadowOffset:CGSizeMake(3.0f, 3.0f)];
publicationDownload.theUIView.clipsToBounds = NO;
publicationDownload.theUIView.backgroundColor = [UIColor clearColor];
[publicationDownload.theInnerUIView.layer setCornerRadius:5];
[publicationDownload.theInnerUIView.layer setShadowColor:[UIColor blackColor].CGColor];
[publicationDownload.theInnerUIView.layer setShadowOpacity:0.5];
[publicationDownload.theInnerUIView.layer setShadowRadius:5];
[publicationDownload.theInnerUIView.layer setShadowOffset:CGSizeMake(3.0f, 3.0f)];
[publicationDownload.theInnerUIView.layer setMasksToBounds:YES];
publicationDownload.theUIView.layer.masksToBounds = NO;
publicationDownload.view.clipsToBounds = YES;
publicationDownload.view.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:.5];

[self.view addSubview:publicationDownload.view];

в публикацииDownloadViewController, который я реализовал:

в viewDidLoad: // Выполните любую дополнительную настройку послезагрузка вида из его кончика.

//self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
//self.view.contentMode = UIViewContentModeRedraw;
self.view.autoresizesSubviews = YES;
//self.view.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
self.view.frame = self.view.bounds;
//theUIView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin;

NSLog(@"PublicationDownloadController: viewDidLoad:");
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) name:UIDeviceOrientationDidChangeNotification object:nil];    
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];

if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown) {
    theUIView.frame = CGRectMake(212, 229, 600, 240);
    self.view.frame = CGRectMake(0, 0, 1024, 768);
} else if (orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight) {
    theUIView.frame = CGRectMake(140, 380, 600, 240);
    self.view.frame = CGRectMake(0, 0, 768, 1024);
}

и дополнительно:

-(void)didRotate:(NSNotification*)notification
{
    NSLog(@"PublicationDownloadController: didRotate");
UIDeviceOrientation oreo = [[UIDevice currentDevice] orientation];
// oreo is our new orientation!
if (oreo == UIInterfaceOrientationPortrait || oreo == UIInterfaceOrientationPortraitUpsideDown) {
    //theUIView.frame = CGRectMake(212, 229, 600, 240);
    self.view.frame = self.view.bounds;
} else if (oreo == UIInterfaceOrientationLandscapeLeft || oreo == UIInterfaceOrientationLandscapeRight) {
    //theUIView.frame = CGRectMake(140, 380, 600, 240);
    self.view.frame = self.view.bounds;
}
}

Сам вид содержит вид в альбомной ориентации, фон которого имеет черный цвет и альфа 0,5 (в IB)- Дополнительно есть еще один вид (theUIView), который содержит некоторые UIControls.Это theUIView должно быть в центре.Это работает, если приложение ste запускается в альбомной ориентации для альбомной ориентации, но не, если ориентация меняется на книжную.Также, если приложение запускается в портретной ориентации, представление не отображается по центру.

Любая помощь очень ценится!

1 Ответ

0 голосов
/ 21 мая 2012

Это было проще, чем ожидалось.Работа с autoresizemask в Интерфейсном Разработчике и очистка грязного кода сделали свое дело.

...