2012-04-24 3 views
0

ViewControllerA имеет метод viewDidLoad, который программно создает кнопку, как:Как изменить программно созданный вид на вращение?

self.cancelButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
self.cancelButton.frame = CGRectMake(330, 625, 125, 30); 
[self.cancelButton setTitle:@"Cancel" forState:UIControlStateNormal]; 
[self.cancelButton sizeToFit]; 
[self.cancelButton addTarget:self action:@selector(cancelButton:) forControlEvents:UIControlEventTouchUpInside]; 
[self.cancelButton setNeedsDisplay]; 
[self.view addSubview:self.cancelButton]; 

У меня также есть - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{return YES;}.

Когда устройство повернуто к пейзажу, я хочу изменить рамку кнопки. Я попытался проверить interfaceOrientation в моем методе shouldAutorotate... и установить рамку. Я попытался сделать if (UIInterfaceOrientationLandscapeLeft == [[UIApplication sharedApplication] statusBarOrientation]) и сбросить рамку. Ничего из этого не сработало. Какие-либо предложения?

EDIT

Вот еще одна попытка, которая не производит никаких изменений:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
    if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft){ 
    self.cancelButton.frame = CGRectMake(15, 15, 300, 50); 
    } 
} 

Так что я попытался сделать:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
    if (toInterfaceOrientation == UIInterfaceOrientationPortrait 
    || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown){ 
    NSLog(@"Portait"); 
    } else { 
    NSLog(@"Landscape"); 
    } 
} 

И ни один из NSLogs дозвонились, когда-либо. Моя точка зрения вращается, хотя ...

ответ

0

Взгляните на это с UIViewController:

– willRotateToInterfaceOrientation:duration: 
– willAnimateRotationToInterfaceOrientation:duration: 
– didRotateFromInterfaceOrientation: 

Посмотрите на это сообщение: willAnimateRotationToInterfaceOrientation not called on popViewControllerAnimated

+0

Я добавил изменение с попыткой. Я также попробовал интерфейс '- (void) willAnimateRotationToInterfaceOrientation: (UIInterfaceOrientation). Продолжительность сеанса: (NSTimeInterval) duration' с тем же кодом, но без изменения пользовательского интерфейса. –

+0

Вы поставили точку останова в методе willAnimateRotationToInterfaceOrientation, чтобы убедиться, что он вызван с правильным значением? Я, похоже, также помню, что если у вас одновременно есть несколько контроллеров на экране, все становится глупо, особенно на iOS <5 – mprivat

+0

Я просто добавил обновление к исходному сообщению. 'willAnimateRotationToInterfaceOrientation: duration:' никогда не вызывается в моем коде, даже если вид IS вращается. Ваш комментарий о нескольких контроллерах на экране интересен, хотя, поскольку контрольный контроллер, с которым я пытаюсь работать прямо сейчас, контролирует это представление, которое является представлением 'modalPresentationStyle UIModalPresentationFormSheet'. Возможно, в этом и проблема? –

0

Проверьте ориентацию таким образом ....

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation) 
interfaceOrientation duration:(NSTimeInterval)duration { 
if (interfaceOrientation == UIInterfaceOrientationPortrait 
|| interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) 
{ 
    // portrait & upsidedown 
    self.cancelButton.frame = CGRectMake(330, 625, 125, 30); 
} 
else 
{ 
    // landscape 
    self.cancelButton.frame = CGRectMake(330, 625, 125, 30); 
} 
} 
Смежные вопросы