Ориентация на iPad Проверка класса UIView? - PullRequest
2 голосов
/ 15 октября 2011

У меня есть класс UIView, который я добавляю к своему основному UIViewController, и мне нужно проверить ориентацию устройства (iPad) при запуске приложения в методе viewDidLoad.Однако, поскольку класс UIView (не UIViewController), я не могу использовать такие методы, как willAnimateRotationToInterfaceOrientation.

. Поэтому я попытался использовать это в своем UIView классе:

if (([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft) ||
    ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight)) {

Однако, при тестировании с некоторыми точками останова, какой бы ни была ориентация, оператор of никогда не вызывается, его пропуски сразу проходят его.Так что вы предлагаете мне сделать, чтобы преодолеть эту проблему?

Мне нужно как-то определить ориентацию из класса UIView.

Спасибо.

Ответы [ 2 ]

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

Одна вещь, которую вы можете сделать, это зарегистрироваться для уведомления об ориентации от NSNotificationCenter:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:nil];

...

- (void)orientationChanged:(NSNotification *)notification
{
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
    // do things
}

Это, однако, неоптимально, так как iPad может лежать на столе, когда приложение запускается, и вы получитеUIDeviceOrientationUnknown тогда.Здесь я сделал это ...

Я закончил тривиальной проверкой, подобной этой:

BOOL landscape = self.bounds.size.width > self.bounds.size.height;
if (landscape)
    // landscape stuff
else
    // portrait stuff

Но в моем случае вид изменил соотношение сторон при повороте.Если это тоже ваш случай, он должен работать нормально.

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

Где вы размещаете чек? Расположение может легко объяснить, почему это не называется. Чтобы получить информацию о ротации, вы можете зарегистрироваться для получения уведомления или сделать так, чтобы ваш контроллер вида вызывал метод в вашем представлении. Пример кода для последнего:

// ViewController.m
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    [self.customView willRotateToOrientation:toInterfaceOrientation];
}

// CustomView.m
- (void)willRotateToOrientation:(UIInterfaceOrientation)newOrientation {
    // Handle rotation
}

Метод контроллера представления - тот, который вы переопределяете; метод представления должен быть объявлен в заголовке.

Обновление: Кроме того, вы можете узнать вращение в `viewWillAppear 'контроллера:

// ViewController.m
- (void)viewWillAppear {
    [self.customView willRotateToOrientation:[[UIDevice currentDevice] orientation];
}

Метод, по вашему мнению, будет вызываться соответственно.

...