2012-04-25 2 views
0

В моем приложении, я хочу установить ориентацию UIView в соответствии с ориентацией на iPhone дома. Я сделал это, используя следующий путь:Исправить положение uiview в iphone sdk

/* I handled view orientation in shouldAutorotate method*/ 
    -(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
    { 
     if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft) 
      viewForBarButtons.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin; 
     else if (interfaceOrientation == UIInterfaceOrientationLandscapeRight) 
      viewForBarButtons.autoresizingMask = UIViewAutoresizingFlexibleRightMargin; 
     else if (interfaceOrientation == UIInterfaceOrientationPortrait) 
      viewForBarButtons.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin; 
     else if (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) 
      viewForBarButtons.autoresizingMask = UIViewAutoresizingFlexibleTopMargin; 
     return (interfaceOrientation == UIInterfaceOrientationPortrait); 
    } 

где viewForBarButtons является UIView внутри ViewController.

Но если я установил возврат Да вместо возврата (interfaceOrientation == UIInterfaceOrientationPortrait); то это не сработает.

Как решить эту проблему. Если кто-нибудь это знает, тогда, пожалуйста, помогите мне. Аналогичная функциональность реализована в приложении LifeCards. Спасибо заранее.

ответ

1

Вышеуказанный способ заключается в том, чтобы решить, следует ли поворачивать ваш взгляд на определенную ориентацию при изменении ориентации устройства.

return (interfaceOrientation == UIInterfaceOrientationPortrait); 

Указывает на поддержку только ориентации книжной ориентации.

return YES; 

будет поддерживать все ориентации.

Но если вы устанавливаете свой контроллер viewController в TabBarController, тогда он будет вращаться только в том случае, если все диспетчеры просмотра поддерживают эту конкретную ориентацию.

Вместо того чтобы помещать вышеуказанный код для авторезистирования объекта в willRotateToInterfaceOrientation.

Но вы должны знать одну вещь, по задав

UIViewAutoresizingFlexibleLeftMargin

Вы просто указав эту точку зрения можно поставить столько, сколько пространства хотите между объектом и левым краем. Но он будет удерживать предыдущие позиции других сторон во время изменения ориентации, поэтому вам может потребоваться физическое изменение происхождения объекта (viewForBarButtons)

Ok. Я предполагаю, что вы говорите, вы хотите, чтобы viewForBarButtons был рядом с домашним баттоном, и ему нужно соответственно позиционировать/поворачивать свои подзоны.

Первый регистр для devie rotaion или использование didRotateInterfaceOrientation, чтобы инициировать вращающиеся подзоны viewForBarButtons.

#define degreesToRadians(x) (M_PI * x/180.0) 

Поворот подвиды: заменить себя с подвид объекта

UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation; 

    if (animated) 
    { 
     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationDuration:0.3]; 
    } 

    if (orientation == UIInterfaceOrientationPortraitUpsideDown) 
     self.transform = CGAffineTransformRotate(CGAffineTransformIdentity, degreesToRadians(180)); 

    else if (orientation == UIInterfaceOrientationLandscapeRight) 
     self.transform = CGAffineTransformRotate(CGAffineTransformIdentity, degreesToRadians(90)); 

    else if (orientation == UIInterfaceOrientationLandscapeLeft) 
     self.transform = CGAffineTransformRotate(CGAffineTransformIdentity, degreesToRadians(-90)); 
    else 
     self.transform=CGAffineTransformIdentity; 

    if (animated) 
     [UIView commitAnimations]; 
+0

Но если изменить происхождение зрения, то его подвидов получает тревожить. – Girish

+0

может быть один возможность. создайте родительское представление с размером (только дополнением, необходимым для всех сторон, чем viewForBarButtons) и добавьте к нему viewForBarButtons. Установите желаемую маску автоматического изменения размера для viewForBarButton. Добавьте супервизор в контамер и измените размер на весь вид (не забудьте установить гибкую высоту и ширину). Это должно сработать. –

+0

Я прокомментировал, что это будет «предыдущая позиция других сторон во время изменения ориентации». он рассмотрит дело на основе позиций, основанных на надведении, к которому он был добавлен. Извинения за предыдущую ошибку. –

Смежные вопросы