videos ver ventana una segundo seguir reproductor plano pequeña pantalla musica hacer flotante escuchar escuchando como ios uiwindow

ios - ver - ventana flotante netflix



Para crear una nueva ventana UI en la ventana principal (6)

En mi aplicación, quiero crear una nueva UIWindow en la ventana principal UI, y escribí lo siguiente, pero no funciona. Primero, creo una UIWindow en la ventana principal y luego la hago clave y visible, y luego creo una nueva superposición UIWindow , pero no sucede nada.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; self.window.backgroundColor = [UIColor redColor]; ViewController *vc = [[ViewController alloc]initWithNibName:@"ViewController" bundle:nil]; self.window.rootViewController = vc; [self.window makeKeyAndVisible]; UIWindow *window1 = [[UIWindow alloc] initWithFrame:CGRectMake(0, 0, 320, 320)]; window1.backgroundColor = [UIColor redColor]; window1.windowLevel = UIWindowLevelAlert; [window1 makeKeyAndVisible]; return YES; }


Xcode 8 + Swift

class ViewController: UIViewController { var coveringWindow: UIWindow? func coverEverything() { coveringWindow = UIWindow(frame: (view.window?.frame)!) if let coveringWindow = coveringWindow { coveringWindow.windowLevel = UIWindowLevelAlert + 1 coveringWindow.isHidden = false } } }

De acuerdo con la documentación , para recibir eventos que no tienen un valor de coordenadas relevante, como la entrada del teclado, ¡haga que sea key lugar de simplemente ! isHidden :

coveringWindow.makeKeyAndVisible()

Incluso puede controlar la transparencia de su fondo, para un efecto de humo:

coveringWindow.backgroundColor = UIColor(white: 0, alpha: 0.5)

Tenga en cuenta que dicha ventana necesita manejar los cambios de orientación.


En swift se puede agregar una nueva UIWindow como sigue ...

class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? var viewController: ViewController? var navigationController: UINavigationController? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { self.window = UIWindow(frame: UIScreen.mainScreen().bounds) self.viewController = ViewController(nibName: "ViewController", bundle:NSBundle.mainBundle()) self.navigationController = UINavigationController(rootViewController: self.viewController!) self.window!.rootViewController = self.navigationController // self.window!.addSubview(self.viewController!.view) self.window!.makeKeyAndVisible() return true } //Other methods.. }


Su objeto window1 es una variable local, cuando el código se queda sin este método, este objeto ya no existe. Cualquier objeto UIWindow que creamos se agregará a las [[UIApplication sharedApplication] windows] , pero esta matriz solo mantiene una semana de referencia a cualquier objeto UIWindow , por lo que depende de su propio código para mantener el objeto de la ventana. Supongo que el objeto [UIApplication sharedApplication] existe mientras se ejecute la aplicación, para evitar mantener los objetos UIWindow que solo deben existir durante un tiempo y vivir en la memoria "para siempre".

Además, tu código podría funcionar con MRC.


intente agregar una UIView en mainWindow no otra UIWindow como ...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; self.window.backgroundColor = [UIColor redColor]; ViewController *vc = [[ViewController alloc]initWithNibName:@"ViewController" bundle:nil]; self.window.rootViewController = vc; [self.window makeKeyAndVisible]; UIView * viewAlert = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 320)]; viewAlert.backgroundColor = [UIColor redColor]; [self.window.rootViewController.view addSubView:viewAlert]; /* or you can use following.. [self.window addSubView:viewAlert]; */ [viewAlert release]; //FOR NON ARC return YES; }


Swift 4

Para evitar la pérdida de memoria, prefiero inicializar mi ventana personalizada de esta manera, según lo propuesto por Apple:

Si desea proporcionar una ventana personalizada para su aplicación, debe implementar el método de obtención de esta propiedad y usarla para crear y devolver su ventana personalizada.

Ejemplo:

var myCustomWindow: UIWindow? = CustomWindow(frame: UIScreen.main.bounds) func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { let mainController: MainViewController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController() as! MainViewController self.window?.rootViewController = mainController self.window?.makeKeyAndVisible() }


UIWindow *window1 = [[UIWindow alloc] initWithFrame:CGRectMake(0, 0, 320, 320)]; window1.backgroundColor = [UIColor redColor]; window1.windowLevel = UIWindowLevelAlert; [window1 makeKeyAndVisible];

Finalmente, sé por qué no funciona, porque window1 es un método var y se perderá después de que se ejecute el método. Así que declaro una nueva propiedad para ella, como

@property (strong, nonatomic) UIWindow *window2;

y cambiar el código como

UIWindow *window2 = [[UIWindow alloc] initWithFrame:CGRectMake(0, 80, 320, 320)]; window2.backgroundColor = [UIColor redColor]; window2.windowLevel = UIWindowLevelAlert; self.window2 = window2; [window2 makeKeyAndVisible];

¡funciona!