@ NorthBlast Antwort funktioniert gut für die Erkennung von UIWindow
erscheint oben auf der UIViewController
, die die UIWebView
enthält. Leider ist es schwer zu filtern, welche Art von UIWindow
ist (seit, nun ... man kann nicht wirklich wissen, ob es ein Video oder eine andere Art von Fenster ist).
Es gibt 3 spezielle Fälle, die ich filtern bevorzugen, in denen Sie sicher sind, sie sind NICHT Video-Player-Fenster, das sind:
1) _UIAlertControllerShimPresenterWindow
, die eine Art Fenster, das erscheint, wenn mit Warnungen (wie UIAlertView
).
2) UITextEffectsWindow
, die bei der Darstellung spezieller iOS-Fenster angezeigt wird (wie das Freigabefenster, UIActivityViewController
).
3) UIRemoteKeyboardWindow
erscheint beim Präsentieren der Tastatur (aus irgendeinem Grund erschien mir diese Klasse nur bei Verwendung von Swift, aber auf Objective-C tat es nicht ... keine Ahnung, warum das so ist).
So, um Benachrichtigungen zu abonnieren, verwende ich (wie @NorthBlast sagte):
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(windowDidBecomeActive:)
name:UIWindowDidBecomeVisibleNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(windowDidBecomeHidden:)
name:UIWindowDidBecomeHiddenNotification
object:nil];
Dann werden die Implementierungen:
- (void)windowDidBecomeActive:(NSNotification *)notification {
if ([self isVideoPlayerWindow:notification.object]) {
// Do what's needed if it is a video
// For example, on a live streaming radio app, I would stop the audio if a video is started
}
}
- (void)windowDidBecomeHidden:(NSNotification *)notification {
if ([self isVideoPlayerWindow:notification.object]) {
// Do what's needed if it is a video
}
}
- (BOOL)isVideoPlayerWindow:(id)notificationObject {
/*
Define non video classes here, add more if you need it
*/
static NSArray *nonVideoClasses = @[
@"_UIAlertControllerShimPresenterWindow",
@"UITextEffectsWindow",
@"UIRemoteKeyboardWindow"
];
BOOL isVideo = YES;
for (NSString *testClass in nonVideoClasses) {
isVideo = isVideo && ! [notificationObject isKindOfClass:NSClassFromString(testClass)];
}
return isVideo;
}
Ich habe festgestellt, dass ** ** UIWindowDidBecomeVisibleNotification aufgerufen wird, wenn Das Video beginnt im Vollbildmodus. Und ** UIWindowDidBecomeHiddenNotification ** wird aufgerufen, wenn das Video verschwindet. –
@IgorKulagin das ist richtig. – NorthBlast
Sie sparen meine Nacht :) –