ios - without - uiviewcontroller swift
Hacer que una subvista esté al frente de todas las demás vistas (5)
¿Qué self.view
si la vista del proveedor de anuncios no se agrega a self.view
sino a algo como [UIApplication sharedApplication].keyWindow
?
Pruebe algo como:
[[UIApplication sharedApplication].keyWindow addSubview:yourSubview]
o
[[UIApplication sharedApplication].keyWindow bringSubviewToFront:yourSubview]
Estoy trabajando para integrar un proveedor de publicidad en mi aplicación actualmente. Deseo colocar un mensaje de desvanecimiento delante del anuncio cuando se muestra el anuncio, pero no se ha podido completar.
Hice una función que agrega una subvista a mi vista actual e intenta llevarla al frente usando
[self.view bringSubviewToFront:mySubview]
La función se activa al recibir notificación de que el anuncio se ha cargado (la notificación proviene del SDK del proveedor de servicios). Sin embargo, mi subvista no termina en frente del anuncio. Me imagino que el proveedor de publicidad lo hará deliberadamente difícil, pero deseo hacerlo de todos modos. Actualmente estoy discutiendo con el proveedor si esto puede permitirse o no. Pero por el momento, solo quiero ver si es posible.
¿Hay alguna forma de que pueda obligar a una subvista mía a ser la vista más alta para que no quede obstruida por nada?
Necesitaba esto una vez. UIView
clase UIView
personalizada: AlwaysOnTopView
.
@interface AlwaysOnTopView : UIView
@end
@implementation AlwaysOnTopView
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if (object == self.superview && [keyPath isEqual:@"subviews.@count"]) {
[self.superview bringSubviewToFront:self];
}
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
- (void)willMoveToSuperview:(UIView *)newSuperview {
if (self.superview) {
[self.superview removeObserver:self forKeyPath:@"subviews.@count"];
}
[super willMoveToSuperview:newSuperview];
}
- (void)didMoveToSuperview {
[super didMoveToSuperview];
if (self.superview) {
[self.superview addObserver:self forKeyPath:@"subviews.@count" options:0 context:nil];
}
}
@end
Haz que tu vista amplíe esta clase. Por supuesto, esto solo garantiza que una subvista esté por encima de todas sus vistas de hermanos.
Por lo que experimenté zposition es la mejor manera.
self.view.layer.zPosition = 1;
Swift 2 versión de la respuesta de Jere:
UIApplication.sharedApplication().keyWindow!.bringSubviewToFront(YourViewHere)
Swift 3:
UIApplication.shared.keyWindow!.bringSubview(toFront: YourViewHere)
¡Espero que le ahorre a alguien 10 segundos! ;)
prueba esto:
self.view.layer.zPosition = 1;