poner - porcentaje bateria iphone ios 10
Cómo mostrar el indicador de carga en la barra de estado superior (6)
Me he dado cuenta de que algunas aplicaciones como Safari y Mail muestran un indicador de carga en la barra de estado (la barra en la parte superior del teléfono) cuando están accediendo a la red. ¿Hay alguna manera de hacer lo mismo en las aplicaciones de SDK, o es esto solo de Apple?
¡He encontrado las siguientes macros bastante útiles!
#define ShowNetworkActivityIndicator() [UIApplication sharedApplication].networkActivityIndicatorVisible = YES
#define HideNetworkActivityIndicator() [UIApplication sharedApplication].networkActivityIndicatorVisible = NO
Entonces puede llamar a ShowNetworkActivityIndicator();
o HideNetworkActivityIndicator();
desde dentro de su aplicación (¡siempre que el encabezado esté incluido, por supuesto!).
Escribí un singleton que resuelve el problema de las conexiones múltiples manteniendo un contador de lo que está sucediendo (para evitar eliminar el estado cuando una conexión regresa pero otra sigue activa):
El archivo de encabezado:
#import <Foundation/Foundation.h>
@interface RMActivityIndicator : NSObject
-(void)increaseActivity;
-(void)decreaseActivity;
-(void)noActivity;
+(RMActivityIndicator *)sharedManager;
@end
e implementación:
#import "RMActivityIndicator.h"
@interface RMActivityIndicator ()
@property(nonatomic,assign) unsigned int activityCounter;
@end
@implementation RMActivityIndicator
- (id)init
{
self = [super init];
if (self) {
self.activityCounter = 0;
}
return self;
}
-(void)increaseActivity{
@synchronized(self) {
self.activityCounter++;
}
[self updateActivity];
}
-(void)decreaseActivity{
@synchronized(self) {
if (self.activityCounter>0) self.activityCounter--;
}
[self updateActivity];
}
-(void)noActivity{
self.activityCounter = 0;
[self updateActivity];
}
-(void)updateActivity{
UIApplication* app = [UIApplication sharedApplication];
app.networkActivityIndicatorVisible = (self.activityCounter>0);
}
#pragma mark -
#pragma mark Singleton instance
+(RMActivityIndicator *)sharedManager {
static dispatch_once_t pred;
static RMActivityIndicator *shared = nil;
dispatch_once(&pred, ^{
shared = [[RMActivityIndicator alloc] init];
});
return shared;
}
@end
Ejemplo:
[[RMActivityIndicator sharedManager]increaseActivity];
[NSURLConnection sendAsynchronousRequest:urlRequest queue:self.networkReceiveProcessQueue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
{
[[RMActivityIndicator sharedManager]decreaseActivity];
}
Está en UIApplication:
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
para rápido:
UIApplication.shared.isNetworkActivityIndicatorVisible = true
También debe ocuparse de ocultar el indicador de actividad una vez que finaliza su llamada de red.
Si usa AFNetworking
, entonces no necesita hacer mucho.
Haga los siguientes cambios en AppDelegate
Class:
Importar
AFNetworking/AFNetworkActivityIndicatorManager.h
Pon esto en
didFinishLaunchingWithOptions:
[[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES]
También podría ser útil asegurarse de ejecutarlo en el hilo principal ya que está relacionado con la interfaz de usuario.
dispatch_async(dispatch_get_main_queue(), ^{
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
});
Un solo código de línea para hacer eso:
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;