繁体   English   中英

iOS8的触摸位置在横向上是有限的,好像窗口是纵向的一边?

[英]iOS8 touch position is limited in Landscape, as if window is Portrait on one side?

iOS8中我遇到了一个奇怪的问题。 我一直在谷歌上搜索,并在墙上砸了几天没有运气。 我不太确定如何解释它,但是这里......

应用程序在iOS7下运行良好,但现在使用xCode 6 / iOS8编译我有一些奇怪的方向问题。 我没有使用xib文件,而是以编程方式创建窗口和视图。 我在视图中运行OpenGL,然后在OpenGL中处理其他所有内容。 所以,我正在收集接触并将它们传递给我的GL例程。 一切都很好,直到现在。

现在使用iOS8,似乎“触摸窗口”正在自行旋转,以便横向中的触摸仅限于屏幕的一侧,就好像显示窗口是横向,但触摸都在设置为在屏幕的一侧。

看起来很奇怪的是,触摸按照正常情况进入整个屏幕的视图,但是Y值在320处停止并且不再进一步。 X正常行动。 如果我将设备转为纵向(视图控制器不会自动旋转),它一切正常,但在横向中它会切换到这种奇怪的行为。

我已经尝试了所有我能想到的,没有任何改变,我不知道从哪里开始解决为什么会发生这种情况。 任何建议将不胜感激。

在iOS8上,UIScreen现在面向接口。 在iOS8之前的一些(或者我应该说全部)库中,进行了一些检查以调整应用程序在横向时的缺少和交换宽度和高度。

你应该看一些代码进行一些旋转并删除它。

-[UIScreen bounds]
-[UIScreen applicationFrame]
状态栏框架和
键盘框架现在面向接口。
(参见WWDC2014视频 - 在iOS8 @ 50:41中查看控制器的进步

在我们的例子中。
强制旋转视图的变换导致该问题。
我们删除了该代码,随之旋转

+ (void)attemptRotationToDeviceOrientation 

问题解决了。

我们在forceRotate方法中调用了该方法。

-(void)forceRotateLandscape {
    ...
    UIViewController *vc = [UIViewController new];
    [topVc presentViewController:vc animated:NO completion:nil];
    [topVc dismissViewControllerAnimated:NO completion:nil];

    supportedOrientations = UIInterfaceOrientationMaskLandscapeRight;
    [UIViewController attemptRotationToDeviceOrientation];
    ...
}

我的猜测是,无论手机识别器拥有什么视图都没有在旋转过程中调整一个(或多个)以下原因:

  • 它使用自动布局,而不是固定在其超级视图上
  • 它使用弹簧和支柱,没有正确的UIViewAutoresizing面具
  • 它存在于未调整大小的子视图中

如果您使用的是自动布局,请在视图控制器中尝试:

- (void)viewDidLayoutSubviews
{
  // For each subview with its own auto layout:
  [self.mySubview layoutSubviews];

  // ...

  [super viewDidLayoutSubviews];
}

好吧,我发现了这个问题(我是赏金给予者)。

我们可能在我们的App中使用某种黑客来手动处理视图的旋转,因为我们在rootViewController中将 0返回到- (NSUInteger)supportedInterfaceOrientations

- (NSUInteger)supportedInterfaceOrientations {
    return 0; // BOOOOOOO, even forbidden by documentation
}

然后我们通过监听UIDeviceRotationChanged通知,旋转它们的视图,并要求statusBar也旋转来手动管理我们的内部视图。

不为 0的内容返回到此supportedInterfaceOrientations使“触摸”图层与其余图层一起旋转。
但是现在我们必须让代码发展为使用iOS旋转而不是我们的hacky层。

此外,经过更多调查,特别是在iPad上,您必须使用基于Storyboard的UIWindow。 在横向启动应用程序时,使用基于XIB的窗口将导致其尺寸错误。 这导致了大量的车架,并且我们的布局很糟糕。

我有同样的问题。 在iOS7中,一切都运行良好,在iOS8中它就像“触摸视图”仍然是纵向的。

我刚刚用故事板替换了主xib,没有其他变化(我已经尝试了大量的屏幕绑定和框架没有任何结果)。

试一试,让我知道它是否也适合你。 祝好运。

我对景观中的第二个窗口有同样的问题。 它拒绝在整个屏幕上显示自己,也拒绝在屏幕的剪切部分接收触摸事件。 到目前为止,我发现的唯一解决方案是通过添加所需的启动屏幕来支持iPhone6 / 6 +原生分辨率。 如果您在应用中不支持这些可能是同一问题的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM