【问题标题】:UIImageView and Window Orientation ProblemUIImageView 和窗口方向问题
【发布时间】:2011-07-19 14:46:01
【问题描述】:

我想做什么

我想要的是应用程序顶部的图像视图,我可以控制它的外观。例如,在主页中我不想要横幅,但在另一个视图中我想要。这意味着如果我确实想要横幅,我必须向下移动整个视图。

我做了什么

以下内容在我的 App Delegate 中。基本上,我将横幅的 customTabBarController 视图向下移动了 145 像素。

if ([self.customTabBarController interfaceOrientation] == UIInterfaceOrientationPortrait) {

[customTabBarController.view setFrame:CGRectMake(0, 145, 768,1024-145)];
banner = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 768, 145)];

}
else if ([self.customTabBarController interfaceOrientation] == UIInterfaceOrientationPortraitUpsideDown) {

    [customTabBarController.view setFrame:CGRectMake(0,0, 768,1024-145)];
    banner = [[UIImageView alloc] initWithFrame:CGRectMake(0, 768+145, 768, 145)];

}

banner.image = image;

banner.hidden = NO;

[self.window addSubview:banner];

问题是什么

现在,我已经完成了纵向部分,但是当我尝试改变方向时,图像也会随之改变方向;这意味着当我将 iPad 更改为横向和上下颠倒时,图像会向侧面倾斜。基本上,它始终位于 iPad 的一侧。

有人可以帮忙吗?也欢迎对其他方法提出建议。

编辑:我意识到我没有为横向实现 setFrame,但我想先实现它以实现倒置纵向,但代码不起作用。倒置时应用程序的外观是横幅位于底部且图像倒置。

【问题讨论】:

    标签: objective-c ipad uiimageview orientation nswindow


    【解决方案1】:

    参见“Orientation Problem while using insertSubview”。您通常不应将视图插入UIWindow 本身。它不旋转。您应该将它们插入到window.rootViewController.view 或以下,以便您自动获得正确的转换。否则,您将需要使用“wrong orientation on UIViewController while animating it”中给出的effectiveTransform 等方法自己计算有效变换。但是,只要有可能,请使用根视图。它为您创造了所有的魔法。

    【讨论】:

    • 问题是,我希望能够将这个 UIImageView 放在 UISplitViewController 之上。您可能知道,我无法设置 UISplitViewController 的框架。这就是为什么我把它放在 NSWindow 中,但现在我必须处理所有的方向问题。有什么建议吗?
    • 如前所述,将它们插入window.rootViewController.view。它通常是一个UILayoutContainerView,它是一个私有类,负责诸如正确旋转之类的事情。如果你想移动整个界面,通常也可以调整它的框架。
    • 我觉得我可能在这里遗漏了一些东西。您是否只关心图像的旋转,或者您是否也无法将您的盒子放在正确的位置?
    • 设置另一个视图的框架我现在会很好,我遇到的问题是让图像出现在 window.rootViewController.view;我尝试了 window.rootViewController.view addSubview:imageView,但这似乎不起作用。我应该创建一个 UIViewController 并将它们连接到 xib 文件中吗?
    • 不,但要确保 window.rootViewController 连接到某个东西(确保它不是 nil)。如果您使用模板创建项目,它应该是。
    【解决方案2】:

    你有没有想过把所有这些都放到一个支持多方向的 UIViewController 中?您可以使用自动调整大小的蒙版来实现不同方向的正确大小。

    【讨论】:

      【解决方案3】:

      您可以注册方向更改通知并将 CGTransform 应用到您的横幅 UIView

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多