問題描述
iPhone設備首次去掉的傳統的Home鍵,以極大的擴展了屏幕尺寸,取代Home鍵的是屏幕底部中間的虛擬home條,響應上滑手勢回到主頁面。但如此造成的問題是遊戲中尤其是像王者榮耀等操作比較頻繁的遊戲很容易誤操作home鍵,導致遊戲偶然退出影響遊戲體驗。
適配目標
現在適配iPhoneX的目標是兩次上滑操作才最終出發home鍵,默認狀態讓home虛擬條處於灰白色狀態,第一次上滑home條激活變黑,再次上滑纔會最終出發回到主頁面,這樣就避免了遊戲中的頻繁誤操作導致遊戲意外退出。目前像楚留香等遊戲已經在細節上做了此適配,而其他多數遊戲並沒有考慮到這個。
適配方案
iOS dev官方文檔提到在iOS 11之後給出了一個供開發者延遲系統手勢響應的回調接口:preferredScreenEdgesDeferringSystemGestures。在我們用unity打出xcode包後,在Classes/UI/UnityViewControllerBase+iOS.mm文件下有如下兩個回調函數:
- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures
{
UIRectEdge res = UIRectEdgeNone;
if (UnityGetDeferSystemGesturesTopEdge())
res |= UIRectEdgeTop;
if (UnityGetDeferSystemGesturesBottomEdge())
res |= UIRectEdgeBottom;
if (UnityGetDeferSystemGesturesLeftEdge())
res |= UIRectEdgeLeft;
if (UnityGetDeferSystemGesturesRightEdge())
res |= UIRectEdgeRight;
return res;
}
-(BOOL)prefersHomeIndicatorAutoHidden{
return UnityGetHideHomeButton();
}
一個是延遲系統手勢的,一個是是否自動隱藏home條的,但要注意我們是希望home條變灰,經過一個激活的過程達到系統手勢延遲的效果,而不是希望home條隱藏消失,所以最終的方案是將上面兩個函數替換成:
- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures
{
return UIRectEdgeAll;
}
- 即:
1.preferredScreenEdgesDeferringSystemGestures回調返回固定的UIRectEdgeAll,
2.prefersHomeIndicatorAutoHidden回調刪掉。
注:如果某些版本打出的xcode本來就沒有上面兩個回調函數,則只添加下面的回調即可:
- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures
{
return UIRectEdgeAll;
}
適配後的效果
遊戲中屏幕中底部home 條默認灰白色,不小心上滑home條變黑激活,再次上滑退出遊戲回到home主頁面。
轉載地址:https://blog.csdn.net/cordova/article/details/80547746