добавление UIButton к проблемам поворота окна - PullRequest
0 голосов
/ 25 мая 2011

Я делаю:

UIWindow *window = [[[UIApplication sharedApplication] windows] objectAtIndex:0];
    CGPoint point = CGPointMake(window.frame.size.width/2, window.frame.size.height/2);
    point = CGPointMake(window.frame.size.width - v.frame.size.width - 10, 30);
    point = CGPointMake(point.x + offsetLeft, point.y + offsetTop);
    v.center = point;
    timer1 forMode:NSDefaultRunLoopMode];
    [window addSubview:v];

Одна проблема заключается в том, что когда я делаю в ландшафтном режиме:

UIWindow *window = [[[UIApplication sharedApplication] windows] objectAtIndex:0];

и я печатаю:

NSLog(@"WINDOW WIDTH IS %f AND HEIGHT IS %f", window.frame.size.width, window.frame.size.height);

Я получил:

WINDOW WIDTH IS 768.000000 AND HEIGHT IS 1024.000000

Что не соответствует действительности ... кажется, что его не волнует ориентация.

Ответы [ 4 ]

5 голосов
/ 26 мая 2011

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

См. этот вопрос для получения более подробной информации по этому вопросу. Короткий ответ заключается в том, что такого рода вещи лучше всего сделать с помощью шаблона приложения на основе представления и использования rootViewController для получения корневого представления и вставки туда.

Обратите внимание, что вам также следует избегать запроса первого окна UIApplication. Это не гарантируется как «главное» окно; первое окно - самое дальнее заднее окно (и обычно бывает больше одного окна). Если вы должны использовать UIWindow, получите его из представлений, которые вас интересуют ([view window]), или привяжите его к вашему UIApplicationDelegate в XIB.

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

Я думаю, что только первое подпредставление вашего окна действительно получает события поворота. Попробуй это.

[[[[[UIApplication sharedApplication] keyWindow] subviews] objectAtIndex:0] addSubview:SOME_SUBVIEW];
0 голосов
/ 25 мая 2011

С помощью

UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];

вы можете узнать, с какой ориентацией обращено ваше устройство. Затем вы можете выполнить проверку:

if (orientation == UIDeviceOrientationPortrait) {
    // ...
} else {
    // ...
}
0 голосов
/ 25 мая 2011

Используйте [[UIScreen mainScreen] bounds], чтобы получить рамку. Он вернет соответствующую информацию кадра во всех ориентациях. Я столкнулся с подобной проблемой. И я не знаю причину этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...