我在做:
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
这不是真的..似乎它并不关心方向。
答案 0 :(得分:5)
您不应将视图插入UIWindow
。 UIWindow
本身不会旋转。它将变换应用于旋转子视图,该子视图保存根视图。如果可能的话,您应该将视图插入到根视图中。否则,你需要计算自己的变换,这很痛苦。
有关此问题的详细信息,请参阅this question。简短的回答是,最好通过使用基于视图的应用程序模板完成此类操作,并使用rootViewController
获取根视图并插入其中。
请注意,您还应该避免要求UIApplication
的第一个窗口。这不能保证是“主要”窗口;第一个窗口是最后面的窗口(并且有多个窗口并不罕见)。如果您必须使用UIWindow
,请从您关注的视图([view window]
)获取该视图,或将其绑定到XIB中的UIApplicationDelegate
。
答案 1 :(得分:1)
我认为只有窗口的第一个子视图才会实际接收旋转事件。试试这个。
[[[[[UIApplication sharedApplication] keyWindow] subviews] objectAtIndex:0] addSubview:SOME_SUBVIEW];
答案 2 :(得分:0)
使用[[UIScreen mainScreen] bounds]获取帧。它将在所有方向返回适当的帧信息。我遇到了类似的问题。而且我不知道它的原因。
答案 3 :(得分:0)
您可以找到设备所面向的方向
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
然后你可以对它进行检查:
if (orientation == UIDeviceOrientationPortrait) {
// ...
} else {
// ...
}