Есть ли способ получить кадр объекта UIO с другой ориентацией? - PullRequest
0 голосов
/ 03 октября 2011

У меня есть пианино UIView, сделанное из Key subviews.Клавишам назначены их рамки относительно структуры фортепьяно.Это прекрасно работает, если я остаюсь в портретном режиме.

Но если я начинаю в альбомном режиме, рамка пианино имеет альбомную ориентацию, но клавиши настраиваются относительно рамки портретного режима пианино.(Там есть серая область, поэтому я знаю, что рамка пианино отличается от суммы клавиш)

Есть ли способ получить кадр пианино в ландшафтном режиме, пока я нахожусь в портретном режиме?Таким образом, я могу проверить, нахожусь ли я в альбомном режиме, и назначить соответствующий кадр.

Код ниже находится в классе фортепиано

- (void) setWhiteKeys {

CGRect baseFrame = CGRectMake(0, 0, self.frame.size.width / 7, self.frame.size.height)                

for (Keys *key in whiteKeys) {

 // sets the key's x origin to where the previous key ended

key.frame = baseFrame;
baseFrame.origin.x = key.frame.origin.x + key.frame.size.width;
}

1 Ответ

1 голос
/ 03 октября 2011

Вам необходимо использовать метод layoutSubviews. Он будет вызываться автоматически при запуске и после изменения ориентации устройства.

В этом методе проследите, чтобы ваш вид проверял его границы, и соответственно расположите все подпредставления, например,

- (void)layoutSubviews {
    CGRect bounds = self.bounds;

    // Layout your subviews here according to the bounds

Ключевым моментом в этом вопросе является то, как вы хотите, чтобы ваши взгляды вели себя в двух разных ориентациях? Вы хотите, чтобы они были больше, или в другом месте, или остались прежними?

...