ver recuperar porcentaje poner pantalla notificaciones como centro borradas bloqueada bateria iphone uikit uiapplication

porcentaje - recuperar notificaciones iphone



Agregar vista en StatusBar en iPhone (5)

¿Es posible agregar una UIView en la barra de tamaño de staus (320 x 20)? No quiero ocultar la barra de estado, solo quiero agregarla en la parte superior de la barra de estado.


Antes que nada, muchas gracias a @Martin Alléus por proporcionar el código para esta implementación.

Solo estoy publicando un problema al que me enfrenté y la solución que utilicé, ya que creo que otros podrían experimentar el mismo problema.

Si la aplicación se inicia mientras hay una llamada en su lugar, la altura de la barra de estado será de 40 píxeles y esto significa que la barra de estado personalizada se inicializará con esa altura. Pero si la llamada finaliza mientras todavía está en la aplicación, la altura de la barra de estado seguirá siendo de 40 píxeles y se verá rara.

Entonces la solución es simple: utilicé el centro de notificaciones para suscribirme al delegado de cambio de marco de la barra de estado de la aplicación y ajustar el marco:

- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame { //an in call toggle was done //fire notification [[NSNotificationCenter defaultCenter] postNotificationName:kStatusBarChangedNotification object:[NSValue valueWithCGRect:oldStatusBarFrame]]; }

Y en ACStatusBarOverlayWindow nos suscribimos a la notificación:

-(id)initWithFrame:(CGRect)frame { if ((self = [super initWithFrame:frame])) { // Place the window on the correct level & position self.windowLevel = UIWindowLevelStatusBar + 1.0f; self.frame = [UIApplication sharedApplication].statusBarFrame; self.backgroundColor = [UIColor blackColor]; //add notification observer for in call status bar toggling [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarChanged:) name:kStatusBarChangedNotification object:nil]; } return self; }

y nuestro código para ajustar el marco:

- (void)statusBarChanged:(NSNotification*)notification { //adjust frame... self.frame = [UIApplication sharedApplication].statusBarFrame; //you should adjust also the other controls you added here }

La kStatusBarChangedNotification es solo una constante que he usado para facilitar la referencia, simplemente puede reemplazarla por una cadena o declarar la constante de forma global.


Escribí una biblioteca estática que imita la superposición de la barra de estado de Reeders, puedes encontrarla aquí: https://github.com/myell0w/MTStatusBarOverlay

Actualmente admite iPhone y iPad, estilos de barra de estado negros predeterminados y opacos, rotación, 3 modos diferentes de animación, seguimiento de historial y muchos más regalos.

¡Siéntase libre de usarlo o enviarme una Solicitud de extracción para mejorarlo!


Puede lograr esto fácilmente creando su propia ventana encima de la barra de estado existente.

Simplemente cree una subclase simple de UIWindow con la siguiente modificación de initWithFrame:

@interface ACStatusBarOverlayWindow : UIWindow { } @end @implementation ACStatusBarOverlayWindow - (id)initWithFrame:(CGRect)frame { if ((self = [super initWithFrame:frame])) { // Place the window on the correct level and position self.windowLevel = UIWindowLevelStatusBar+1.0f; self.frame = [[UIApplication sharedApplication] statusBarFrame]; // Create an image view with an image to make it look like a status bar. UIImageView *backgroundImageView = [[UIImageView alloc] initWithFrame:self.frame]; backgroundImageView.image = [UIImage imageNamed:@"statusBarBackground.png"]; [self addSubview:backgroundImageView]; [backgroundImageView release]; // TODO: Insert subviews (labels, imageViews, etc...) } return self; } @end

Ahora puede, por ejemplo, en un controlador de vista en su aplicación, crear una instancia de su nueva clase y hacerla visible.

overlayWindow = [[ACStatusBarOverlayWindow alloc] initWithFrame:CGRectZero]; overlayWindow.hidden = NO;

Tenga en cuenta que debe interferir con el estado de la clave de la ventana usando - (void)makeKeyAndVisible o similar. Si hace que su ventana principal (la ventana UIWindow en su delegado de aplicación) pierda el estado de la clave, tendrá problemas para desplazar las vistas de desplazamiento hacia arriba cuando toque la barra de estado, etc.


Solo para descartar el "No puedes hacer estos comentarios" ...

No sé cómo pero sé que es factible. La aplicación de lector de Feed llamada Reeder hace eso.

Como puede ver en la captura de pantalla, Reeder coloca un pequeño punto en la parte superior derecha de la pantalla. Cuando lo tocas. La barra llenará toda la barra de estado hasta que vuelva a tocarla para hacerlo pequeña.


Todas las respuestas parecen funcionar, pero en iOS6.0 tengo los siguientes problemas:

1 / Las rotaciones se ven mal

2 / Ventana (la barra de estado es una especie de ventana) necesaria RootViewController

Estoy usando la respuesta de myell0w , pero rotar no funciona. Acabo de eliminar una ventana extra y usar UIWindow desde AppDelegate para implementar la barra de estado. Puede ser que esta solución esté bien solo para una aplicación UIViewController ...

Ive implementado de la siguiente manera:

1 / En ApplicationDelegate:

self.window.windowLevel = UIWindowLevelStatusBar + 1; self.window.backgroundColor = [UIColor clearColor]; self.window.rootViewController = _journalController;

2 / Cree UIView personalizado e implemente todo lo que necesita dentro: para un ejemplo de barra de estado táctil:

@interface LoadingStatusBar : UIControl

Y crea y agrega fácilmente a tu vista de controlador:

_loadingBar = [[LoadingStatusBar alloc] initWithFrame:topFrame]; [self addSubview:_loadingBar];

3 / Algo de magia cuando agregas tu vista de controlador (en initWithFrame :)

CGRect mainFrame = self.bounds; mainFrame.origin.y = 20; self.bounds = mainFrame;

Su vista de controlador tendrá 2 vistas: vista de contenido y vista de la barra de estado. Puede mostrar la barra de estado u ocultarla cuando lo desee. El marco de la vista de contenido será:

_contentView.frame = CGRectMake(0, 20, self.bounds.size.width, self.bounds.size.height);

4 / Y una última magia aquí :) Para detectar toques en el área no touchable que he usado:

-(id)hitTest:(CGPoint)point withEvent:(UIEvent *)event { if (point.y < 20) return _loadingBar; return [super hitTest:point withEvent:event]; }

Por ahora funciona bien en iPad / iPhone y todos los iOS de 4 a 6.