UIView 的方向不正确

Posted

技术标签:

【中文标题】UIView 的方向不正确【英文标题】:UIView has incorrect orientation 【发布时间】:2012-03-23 19:58:38 【问题描述】:

我正在开发这个只支持横向的 cocos2D 应用程序。这个 UIView 是垂直显示的,就好像设备是纵向的一样。我有两个问题:

为什么是垂直显示? 是否可以在不手动旋转视图的情况下使其正常显示?

这是视图控制器中的代码:

// this method is called from init
-(void) addLoadingView     
        CGSize size = [[CCDirector sharedDirector] winSize];

    _blockerView = [[[UIView alloc] 
        initWithFrame: CGRectMake(0, 0, 280, 60)] autorelease];
    _blockerView.backgroundColor = [UIColor colorWithWhite: 0.0 alpha: 0.8];
    _blockerView.center = CGPointMake(size.width/2, size.height/2);
    _blockerView.alpha = 0.0;
    _blockerView.clipsToBounds = YES;
    if ([_blockerView.layer respondsToSelector: @selector(setCornerRadius:)])
        [(id) _blockerView.layer setCornerRadius: 10];

    _blockerLabel = [[[UILabel alloc] initWithFrame: CGRectMake(0, 5, _blockerView.bounds.size.width, 15)] autorelease];
    _blockerLabel.text = NSLocalizedString(@"Please Wait...", nil);
    _blockerLabel.backgroundColor = [UIColor clearColor];
    _blockerLabel.textColor = [UIColor whiteColor];
    _blockerLabel.textAlignment = UITextAlignmentCenter;
    _blockerLabel.font = [UIFont boldSystemFontOfSize: 15];
    [_blockerView addSubview: _blockerLabel];

    UIActivityIndicatorView  *spinner = [[[UIActivityIndicatorView alloc]
        initWithActivityIndicatorStyle: UIActivityIndicatorViewStyleWhite] autorelease];

    spinner.center = CGPointMake(_blockerView.bounds.size.width / 2, _blockerView.bounds.size.height / 2 + 10);
    [_blockerView addSubview: spinner];
    [self.view addSubview: _blockerView];
    [spinner startAnimating];


-(void) showLoadingGraphics:(NSString*)textInView
    _blockerView.alpha = 1.0;
    _blockerLabel.text = NSLocalizedString(textInView, nil);

更新

我发现如果将它添加到openGLView中就可以了。

[[[CCDirector sharedDirector] openGLView] addSubview: _blockerView];

而不是

[self.view addSubview: _blockerView];

作品

我怀疑它当前所在的视图以某种方式旋转。

【问题讨论】:

截图? _blockerView 是您正在谈论的视图吗?快速评论 - 如果您已经使用某个框架对其进行了初始化,则无需设置 _blockerView 的中心。 是的,_blockerView 是旋转的。这段代码不是我写的。我只是在这里工作,哈哈。不过感谢您的提示。 【参考方案1】:

请检查视图控制器是否有一个名为 shouldAutorotateToInterfaceOrientation: 的方法。你应该这样回答:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft ||
            interfaceOrientation == UIInterfaceOrientationLandscapeRight);

他们有标签栏控制器吗?如果是这样,那就是一个潜在的陷阱:标签栏的所有视图控制器都需要就方向达成一致。

【讨论】:

不是这样的。自旋转很好,它只是用旋转来绘制的。我怀疑某些超级视图被旋转了或其他什么。【参考方案2】:

你的项目属性列表竖向打开了吗?

<key>UISupportedInterfaceOrientations</key>
<array>
    <string>UIInterfaceOrientationPortrait</string>
    <string>UIInterfaceOrientationLandscapeRight</string>
    <string>UIInterfaceOrientationLandscapeLeft</string>
</array>

【讨论】:

以上是关于UIView 的方向不正确的主要内容,如果未能解决你的问题,请参考以下文章

使用一个 xib 在加载时加载正确的方向 UIView 问题

如何在 Swift 2.0 中获得正确的 UIView 大小或边界?

一个 UIView 中有多个子视图(幻灯片?)?为我指明正确的方向

根据设备方向在 alloc/init 上设置正确的 UIView 帧大小

成员引用基类型“类”不是结构或联合——Fixit 是不是将我引向了正确的方向?

使一个 UIView 组件可上下滚动