Как изменить размер UIView после изменения ориентации (кажется, включает код не работает) - PullRequest
2 голосов
/ 13 июля 2011

Почему этот код макета UIView не работает так, как я хочу?

Фон:

  • У меня есть пользовательский UIView, который есть в моем UIViewController
  • У пользовательского UIView есть фоновое изображение часов и изображение часового изображения
  • После введения некоторого кода (см. Ниже), чтобы попытаться изменить размер часовой стрелки для изменения ориентации, я застреваю.
  • Код, приведенный ниже, действительно запутывает вещи - граница с часовыми стрелками отличается от этого кода

Любые идеи о том, что я делаю неправильно - очевидно, есть какое-то предположение или недоразумение, которое я могу испортить вот так ...

Код, вызываемый UIViewController (в методе didRotateFromInterfaceOrientation) для моего пользовательского представления:

// Centre image 
self.hourHandImageView.center = self.hourFaceUIImageView.center;

// Resize to cater for either Portrait or Landscape orientation
CGSize currSize = self.hourFaceUIImageView.frame.size;
float newHourHandImageheightWidth = currSize.width < currSize.height ? currSize.width : currSize.height;
CGSize newHourHandViewSize = CGSizeMake(newHourHandImageheightWidth, newHourHandImageheightWidth);
CGRect newRect = self.hourHandImageView.frame;
newRect.size = newHourHandViewSize;
self.hourHandImageView.frame = newRect;

PS. Без кода «Изменить размер для размещения книжной или альбомной ориентации» часовая стрелка правильно остается в центре, где должна (отмечая, что я использую преобразование, чтобы перевернуть ее). Все, что мне действительно нужно сделать, - это соответствующим образом изменить размер часовой стрелки после изменения ориентации, отметив, что фоновое изображение часа меньше в ландшафтном режиме.

1 Ответ

1 голос
/ 13 июля 2011

Во-первых, как вы можете определить, находитесь ли вы в книжной или альбомной ориентации? С этим (?):

float newHourHandImageheightWidth = currSize.width < currSize.height ? currSize.width : currSize.height;

Я бы посоветовал вам сделать что-то вроде этого:

-

(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
    if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation)) {
        [self reOrderToPortrait];
    } else if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)){
        [self reOrderToLandScape];
    }
}

Затем в каждом методе вы должны определить новые кадры для ваших представлений. Начните с удаления авторазмера из ваших представлений, потому что вы определите новые кадры, и вы не хотите, чтобы это мешало. Вы также можете определить несколько таких случаев:

#define hourHandImageViewPortrait CGPointMake(...,...)
#define hourHandImageViewLandScape CGPointMake(..., ...)
...