Iphone 将UIButton添加到窗口旋转问题

Iphone 将UIButton添加到窗口旋转问题,iphone,objective-c,ipad,uisplitviewcontroller,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,

我正在做:

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

但事实并非如此。。它似乎不关心方向。

使用[[UIScreen mainScreen]bounds]获取帧。它将在所有方向上返回适当的帧信息。我面临着类似的问题。我不知道原因。

使用[[UIScreen mainScreen]bounds]获取帧。它将在所有方向上返回适当的帧信息。我面临着类似的问题。我不知道原因。

您可以找出设备所面对的方向

UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
然后您可以对其执行检查:

if (orientation == UIDeviceOrientationPortrait) {
    // ...
} else {
    // ...
}

您可以找出设备所面对的方向

UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
然后您可以对其执行检查:

if (orientation == UIDeviceOrientationPortrait) {
    // ...
} else {
    // ...
}

不应将视图插入
ui窗口
ui窗口本身不旋转。它将变换应用于包含根视图的旋转子视图。如果可能的话,应该将视图插入根视图。否则,您将需要计算自己的变换,这是一个难题

有关此问题的更多详细信息,请参阅。简单的回答是,最好使用基于视图的应用程序模板,并使用
rootViewController
获取根视图并插入其中


请注意,还应避免询问
ui应用程序的第一个窗口。这并不保证是“主”窗口;第一个窗口是最远的后窗口(通常有多个窗口)。如果必须使用
UIWindow
,请从您关心的视图(
[view window]
)获取该窗口,或将其绑定到XIB中的
UIApplicationLegate

不应将视图插入
UIWindow
ui窗口本身不旋转。它将变换应用于包含根视图的旋转子视图。如果可能的话,应该将视图插入根视图。否则,您将需要计算自己的变换,这是一个难题

有关此问题的更多详细信息,请参阅。简单的回答是,最好使用基于视图的应用程序模板,并使用
rootViewController
获取根视图并插入其中


请注意,还应避免询问
ui应用程序的第一个窗口。这并不保证是“主”窗口;第一个窗口是最远的后窗口(通常有多个窗口)。如果您必须使用
UIWindow
,请从您关心的视图(
[view window]
)获取它,或者将其绑定到XIB中的
UIApplicationLegate

我认为只有窗口的第一个子视图实际接收旋转事件。试试这个

[[[[[UIApplication sharedApplication] keyWindow] subviews] objectAtIndex:0] addSubview:SOME_SUBVIEW];

我认为只有窗口的第一个子视图实际接收旋转事件。试试这个

[[[[[UIApplication sharedApplication] keyWindow] subviews] objectAtIndex:0] addSubview:SOME_SUBVIEW];

@aherlambang你期待什么?它应该从那里旋转90度如果视图是纵向的,那么这是正确的,但是在横向的,它应该从我展示的视图顺时针旋转90度above@aherlambang在你发布的图片中它不是旋转的吗?灰色区域后面的线条是一个UITabelView,想象一下,我想你会明白我的意思mean@aherlambang你期待什么?它应该旋转90度如果视图是纵向的,那么这是正确的,但在景观中,它应该从我展示的视图顺时针旋转90度above@aherlambang在你发布的图片中它不是旋转的吗?灰色区域后面的线条是一个UITabelView,想象一下,我想你会明白我的意思,但是你怎么能给它添加一个子视图呢?在获得正确的框架并进行计算以确定新添加控件或视图的位置后,将其添加到窗口或其他视图中,无论什么适合你的实现。计算框架是可以的,问题是找到我可以添加到的窗口,但如何向其中添加子视图?在获得正确的框架并进行计算以确定新添加控件或视图的位置后,将其添加到窗口或其他视图中适合您的实现的任何内容。计算框架即可,问题是如何找到我可以添加到的窗口