Перемещение объектов во время вращения вида - PullRequest
1 голос
/ 08 июля 2011

У меня есть приложение для iPad, которое я бы хотел использовать в горизонтальной ориентации, а не в портретной ориентации.Я программно поместил изображения, метки и кнопки в свой вид и использовал CGRectMake (x, x, x, x), чтобы указать им, куда направить вид в центр.Когда приложение вращается горизонтально, мне нужно, чтобы мои метки и кнопки сдвигались вверх (поскольку они не могут опускаться так далеко, когда в альбомном режиме), но остаются в центре.Вот код, с которым я играл:

if((self.interfaceOrientation == UIDeviceOrientationLandscapeLeft) || (self.interfaceOrientation == UIDeviceOrientationLandscapeRight)) 
{
    lblDate = [[UILabel  alloc] initWithFrame:CGRectMake(384-(fieldWidth/2)-30,controlTop+45,120,40)]; //these dimensions aren't correct, though they don't matter here

    lblDate.text = @"Date:";
    lblDate.backgroundColor = [UIColor clearColor];
    [contentView addSubview:lblDate];
} else {
    //the orientation must be portrait or portrait upside down, so put duplicate the above code and change the pixel dimensions
}

Спасибо за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 08 апреля 2014

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

На самом деле единственное решение, которое я нашел, состоит в том, что, поскольку вы хотите, чтобы элементы управления вашего пользовательского интерфейса были расположены динамически, не размещайте их в основном в конструкторе интерфейсов. Построитель интерфейса может быть полезен, зная нужные места для динамических элементов управления как в портретной, так и в альбомной ориентации. Т.е. создайте два отдельных тестовых представления в конструкторе интерфейсов, один портрет и другой ландшафт, выровняйте свои элементы управления по своему желанию и опустите данные X, Y, Width и Height только для использования с CGRectMake для каждого элемента управления.

Как только вы запишите все необходимые данные о позиционировании от разработчика интерфейса, избавьтесь от уже нарисованных ссылок на элементы управления и выходы / действия. Теперь они не будут нужны.

Конечно, не забудьте реализовать willRotateToInterfaceOrientation UIViewController для установки кадра элемента управления при каждом изменении ориентации.

@interface

//Declare your UI control as a property of class.
@property (strong, nonatomic) UITableView *myTable;

@end

@implementation

// Synthesise it
@synthesize myTable

- (void)viewDidLoad
{
    [super viewDidLoad];

// Check to init for current orientation, don't use [UIDevice currentDevice].orientation
  if (self.interfaceOrientation == UIInterfaceOrientationLandscapeLeft || self.interfaceOrientation == UIInterfaceOrientationLandscapeRight)
    {
        myTable = [[UITableView alloc] initWithFrame:CGRectMake(20, 20, 228, 312)];
    }
    else if (self.interfaceOrientation == UIInterfaceOrientationPortrait)
    {
        myTable = [[UITableView alloc] initWithFrame:CGRectMake(78, 801, 307, 183)];
    }
}

    myTable.delegate = self;
    myTable.dataSource = self;

    [self.view addSubview:myTable];
}

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight || toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft)
    {
        // Show landscape
        myTable.frame = CGRectMake(20, 20, 228, 312);

    }
    else
    {
        // Show portrait
        myTable.frame = CGRectMake(78, 801, 307, 183);
    }
}
0 голосов
/ 08 июля 2011

Взгляните на это: управление ориентацией iphone / ipad

Вы просто указываете каждое контрольное местоположение в зависимости от поворота.

...