Положение кнопки UIB в соответствии с ориентацией - PullRequest
0 голосов
/ 28 ноября 2011

Я создал несколько кнопок в представлении iPhone следующим образом

UIButton *button1 = [UIButton buttonWithType:UIButtonTypeCustom];

button1.frame = CGRectMake(1.0, 35.0, 100.0, 100.0);   
[button1 setTitle:NSLocalizedString(@"Button1", @"") forState:UIControlStateNormal];

и т. Д.

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

например, если iphone в портретном режиме, я хочу, чтобы они были

button1.frame = CGRectMake(1.0, 35.0, 100.0, 100.0); 

, если в альбомной ориентации я хочуони должны быть

button1.frame = CGRectMake(1.0, 105.0, 100.0, 100.0); 

Но я также хочу, чтобы это было динамичным, а не просто найти ориентацию iphone в начале.Так что в случае, если я поверну iphone после загрузки программы, эффект также будет иметь место!

Большое спасибо

Ответы [ 2 ]

4 голосов
/ 28 ноября 2011
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    // Set y depend on interface orientation
    CGFloat originInY = ((toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)  ? 105.0f : 35.0f;

    // Set the button's y offset
    button.frame = CGRectMake(button.frame.origin.x, originInY, button.frame.size.width, button.frame.size.height);
}

Я думаю, что он будет делать анимацию сам, если нет, вы можете использовать UIView animation.


Отредактируйте, как реализовать этот метод (просто основываясь на коде, который вы дали):
Обратите внимание, вы должны установить button1 как instance variable в вашем файле .h, а не local variable в файле .m.

.h:

@interface MenuViewController : UIViewController
{
  UIButton * _button1;
}

// your methors

@property (nonatomic, retain) UIButton * button1;

@end

.m:

#import "MenuViewController.h"

@implementation MenuViewController

@synthesize button1 = _button1;

- (void)viewDidLoad
{
  [super viewDidLoad];
  //UIButton button1 = [UIButton buttonWithType:UIButtonTypeCustom];
  self.button1 = [[UIButton alloc] initWithFrame:CGRectMake(1.0, 35.0, 100.0, 100.0)];
  [self.view addSubview:button1];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOr‌​ientation      
{
  return YES;
}

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    // Set y depend on interface orientation
    CGFloat originInY = ((toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)  ? 105.0f : 35.0f;

    // Set the button's y offset
    [self.button1 setFrame:CGRectMake(self.button1.frame.origin.x, originInY, self.button1.frame.size.width, self.button1.frame.size.height)];
}

// other methods include dealloc.

@end
4 голосов
/ 28 ноября 2011

все, что вам нужно было бы сделать, это реализовать либо поворот, либо поворот:

Ответ на просмотр событий вращения

-willRotateToInterfaceOrientation: duration:

-didRotateFromInterfaceOrientation:

Пример:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
    if(UIInterfaceOrientation == UIInterfaceOrientationLandscape){
        //Behavior for landscape orientation

    }
}

Также убедитесь, что также реализовано:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

для возврата YES для всехразрешенные ориентации в вашем интерфейсе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...