在横向模式下添加UIView

时间:2014-04-15 08:06:11

标签: ios iphone objective-c uiinterfaceorientation

我需要在iOS应用中添加广告功能。并且在一段时间间隔后会出现广告屏幕。我的整个人只在横向模式下。当我尝试在当前视图上添加视图时,它会以纵向模式显示视图而不是横向模式。我设置了视图框架,即CGSizeMake(0,0, 568, 320)

  time = [NSTimer scheduledTimerWithTimeInterval:2.0f 
                                          target:self 
                                        selector:@selector(showfirstad) 
                                        userInfo:nil 
                                         repeats:YES];
-(void)showfirstad {
   [[[[UIApplication sharedApplication] windows] lastObject] addSubview:firstad];
}

看起来像subview appears in portrait mode

3 个答案:

答案 0 :(得分:3)

_window = [UIApplication sharedApplication].keyWindow;
if (!_window) _window = [[UIApplication sharedApplication].windows objectAtIndex:0];

UIInterfaceOrientation orientation = self.window.rootViewController.interfaceOrientation;
// Set appropriate view frame (it won't be autosized by addSubview:)
CGRect appFrame = [[UIScreen mainScreen] applicationFrame];

if (UIInterfaceOrientationIsLandscape(orientation))
{
    // Need to flip the X-Y coordinates for landscape
    self.view_login.frame = CGRectMake(appFrame.origin.y, appFrame.origin.x, appFrame.size.height, appFrame.size.width+20);
else
{
    self.view_login.frame = appFrame;
}


[[[_window subviews] objectAtIndex:0] addSubview:self.view_login];

答案 1 :(得分:0)

你的UIView以纵向显示而其他应用程序以横向显示的原因是因为你将UIView添加为窗口的子视图而不是将其添加为视图控制器的子视图视图。这将它置于视图层次结构之外,通过自动旋转自动转换。

应用程序的窗口对象通过查找具有相应视图控制器的最顶层子视图来协调自动旋转。在设备旋转时,窗口调用shouldAutorotateToInterfaceOrientation:在此视图控制器上并根据需要转换其视图。如果您希望视图自动旋转,则它必须是此视图层次结构的一部分。

因此,请执行[window addSubview:UIView];

之类的操作,而不是[self.view addSubview:UIView];

答案 2 :(得分:0)

使用addSubview时,我在旋转和自动编辑方面遇到了同样的问题:myView。 我设法通过使用标准容器控制器或直接将视图放置到故事板来解决此问题。 您可以添加视图,将广告放入故事板中的屏幕,然后将隐藏属性设置为YES。然后你可以在一段时间后将其改为YES。