Пейзажная рамка в портретном режиме - PullRequest
0 голосов
/ 05 мая 2011

Возможно ли получить кадр, который будет у UIView в альбомном режиме, пока устройство / интерфейс находится в портретном режиме?Если да, то как это сделать?

Ответы [ 3 ]

1 голос
/ 09 мая 2011

MrThys, вы должны знать, каким должен быть ваш вид, в портретном или ландшафтном режиме.После этого вы можете определить их как константы следующим образом:

#define myViewPortrait CGRectMake(0.0f, 0.0f, 768.0f,1024.0f)
#define myViewLandscape CGRectMake(0.0f, 0.0f, 1024.0f,768.0f)

Затем вы можете использовать эти значения, когда ваше устройство меняет ориентацию.:)

0 голосов
/ 16 мая 2011

Я не знаю надежного способа сделать это.В одном из моих проектов я использовал UIApplicationWillChangeStatusBarOrientationNotification.Запрос свойства frame или bounds представления возвращает несогласованные результаты в зависимости от того, охвачено ли представление другим представлением (могут быть и другие случаи нарушения).Возможно, в методе willRotateToInterfaceOrientation: ситуация иная.

В моем случае я реализовал свой собственный метод для определения границ вида:

- (CGSize)currentViewSizeWithOrientation:(UIInterfaceOrientation)orient
{
  CGSize size = self.currentView.bounds.size;
  CGSize result;

  if (UIInterfaceOrientationIsPortrait(orient))
    result = CGSizeMake(fminf(size.width, size.height),
                        fmaxf(size.width, size.height));
  else
    result = CGSizeMake(fmaxf(size.width, size.height),
                        fminf(size.width, size.height));
  return result;
}

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

0 голосов
/ 10 мая 2011

Не совсем. Вы знаете, что размеры экрана будут просто менять ширину и высоту. Но если строка состояния видна, используемая область будет отличаться (например, 320x460 в портретной и 300x480 в iPhone в горизонтальной ориентации), а затем, если вы используете UINavigationController или тому подобное, вам придется учитывать его хром, и затем, если ваше представление не является представлением верхнего уровня контроллера представления в контроллере представления контейнера, вы должны принять во внимание различные маски автоматического изменения размера и любой пользовательский код компоновки.

Зачем тебе это вообще нужно? В общем, вы должны просто ответить на размер, указанный в UIViewController willRotateToInterfaceOrientation:duration: или в UIView layoutSubviews.

...