2017-09-27 51 views
8

Funkcje wielozadaniowości otrzymały aktualizacje w systemie iOS 11, jednym z nich był slide over, co zostało zademonstrowane w poniższym gif.Jak wykryć uruchamianie innej aplikacji w systemie iOS 11?

enter image description here

Z tych zmian nie jest już możliwe użycie techniques that check frame size from iOS 9 wykryć, czy inna aplikacja jest „przesuwają się” nad moim app.

Czy istnieje nowa metoda wykrywania, czy inna aplikacja działa jako slajd?

+5

Ktoś z nich głosował i głosował na to pytanie, aby zostać zamkniętym za bycie "zbyt szerokim" - nie rozumiem, jak można uzyskać bardziej szczegółowe informacje bez proponowania odpowiedzi na to pytanie. Jeśli uważasz, że potrzebujesz więcej informacji o pytaniu, skomentuj zamiast głosować na zakończenie. –

+0

Aktualizacja polega na tym, że spędziłem sporo czasu próbując znaleźć coś, co mogłoby rozwiązać ten problem - ale nie ma żadnej publicznej metody sprawdzania, czy inna aplikacja działa tak daleko jak widzę. –

+0

Podaje w dokumentacji, że aplikacjaWillResignActive zostanie wywołana, gdy użytkownik doda slajd do aplikacji. Być może możesz zbudować własne rozwiązanie na podstawie informacji znalezionych tutaj: https://developer.apple.com/library/content/documentation/WindowsViews/Conceptual/AdoptingMultitaskingOniPad/QuickStartForSlideOverAndSplitView.html#//apple_ref/doc/uid/TP40015145-CH13 -SW1 – Maurice

Odpowiedz

2

Udało mi się zrobić to dość łatwo na iPadzie Pro (który obsługuje aplikacje "side-by-side", a nie tylko slajdy). Oto kod:

class ViewController: UIViewController { 

    override func viewWillLayoutSubviews() { 
     isThisAppFullScreen() 
    } 

    @discardableResult func isThisAppFullScreen() -> Bool { 
     let isFullScreen = UIApplication.shared.keyWindow?.frame == UIScreen.main.bounds 
     print("\(#function) - \(isFullScreen)") 
     return isFullScreen 
    } 
} 

Końcowym rezultatem jest to, że będzie to wydrukować „true”, jeśli widok jest pełny ekran i „false”, jeśli jest to dzielenie ekranu z innej aplikacji, a to jest wykonywane każdego coś godzinie jest wyświetlane , ukryte lub przeskalowane.

Zrobiłem prosty film pokazujący wynik tutaj:

https://www.dropbox.com/s/g8pqboj9jjhnlca/FullScreenOrNotTest.mov?dl=0

Problemem jest więc starsze urządzenia, które obsługują wyłącznie slide-over. Dzięki temu Twoja aplikacja nie jest już zmieniana. Zamiast tego po prostu rezygnuje z aktywnego używania, a druga aplikacja staje się aktywna.

W tym przypadku wszystko, co możesz zrobić, to umieścić logikę w AppDelegate, aby wyszukać applicationWillResignActive i applicationDidBecomeActive. Po przesunięciu otrzymasz applicationWillResignActive, ale nie applicationDidEnterBackground.

Możesz to zobaczyć jako możliwość, ale nie możesz rozróżnić między przesuwaniem a widokiem powiadomień z przesuwania w dół od górnej części ekranu. Z tego powodu nie jest idealny, ale monitorowanie cyklu życia aplikacji jest prawdopodobnie najlepszym rozwiązaniem.