将UIButton添加到窗口旋转问题

时间:2011-05-25 19:01:48

标签: iphone objective-c ipad uisplitviewcontroller

我在做:

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 个答案:

答案 0 :(得分:5)

您不应将视图插入UIWindowUIWindow本身不会旋转。它将变换应用于旋转子视图,该子视图保存根视图。如果可能的话,您应该将视图插入到根视图中。否则,你需要计算自己的变换,这很痛苦。

有关此问题的详细信息,请参阅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 {
    // ...
}