[英]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正常行动。 如果我将设备转为纵向(视图控制器不会自动旋转),它一切正常,但在横向中它会切换到这种奇怪的行为。
我已经尝试了所有我能想到的,没有任何改变,我不知道从哪里开始解决为什么会发生这种情况。 任何建议将不胜感激。
在我们的例子中。
强制旋转视图的变换导致该问题。
我们删除了该代码,随之旋转
+ (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];
...
}
我的猜测是,无论手机识别器拥有什么视图都没有在旋转过程中调整一个(或多个)以下原因:
如果您使用的是自动布局,请在视图控制器中尝试:
- (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.