簡體   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