Antworten:
Es ist in UIApplication:
Für Ziel C:
Anfang:
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
Ende:
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
Für schnell:
Anfang
UIApplication.shared.isNetworkActivityIndicatorVisible = true
Ende
UIApplication.shared.isNetworkActivityIndicatorVisible = false
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
// als Einzeiler
UIApplication.sharedApplication().networkActivityIndicatorVisible = true
Ich fand die folgenden Makros ziemlich nützlich!
#define ShowNetworkActivityIndicator() [UIApplication sharedApplication].networkActivityIndicatorVisible = YES
#define HideNetworkActivityIndicator() [UIApplication sharedApplication].networkActivityIndicatorVisible = NO
Sie können also einfach anrufen ShowNetworkActivityIndicator();
oder HideNetworkActivityIndicator();
aus Ihrer App heraus (sofern der Header natürlich enthalten ist!).
Ich habe einen Singleton geschrieben, der das Problem mehrerer Verbindungen löst, indem er einen Zähler für das Geschehen hält (um zu vermeiden, dass der Status entfernt wird, wenn eine Verbindung zurückkehrt, aber eine andere noch aktiv ist):
Die Header-Datei:
#import <Foundation/Foundation.h>
@interface RMActivityIndicator : NSObject
-(void)increaseActivity;
-(void)decreaseActivity;
-(void)noActivity;
+(RMActivityIndicator *)sharedManager;
@end
und Umsetzung:
#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
Beispiel:
[[RMActivityIndicator sharedManager]increaseActivity];
[NSURLConnection sendAsynchronousRequest:urlRequest queue:self.networkReceiveProcessQueue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
{
[[RMActivityIndicator sharedManager]decreaseActivity];
}
Sie müssen darauf achten, dass die Aktivitätsanzeige auch nach Abschluss Ihres Netzwerkanrufs ausgeblendet wird.
Wenn Sie verwenden AFNetworking
, müssen Sie nicht viel tun.
Nehmen Sie folgende Änderungen in der AppDelegate
Klasse vor:
Importieren AFNetworking/AFNetworkActivityIndicatorManager.h
Gib das ein didFinishLaunchingWithOptions:
[[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES]
Die Netzwerkaktivitätsanzeige in der Statusleiste war in iOS 13 veraltet .
Die Verwendung UIApplication.shared.isNetworkActivityIndicatorVisible = true
funktioniert nicht mehr.
Die Verfallsmeldung lautet:
Stellen Sie bei Bedarf eine benutzerdefinierte Benutzeroberfläche für Netzwerkaktivitäten in Ihrer App bereit.
Wie viele gesagt haben, gibt es keine Netzwerkaktivitätsanzeige für das iPhone X und wahrscheinlich für die anderen neuen iPhones mit der Kerbe.
Ich bin auf diese unglaubliche Bibliothek gestoßen, die von Ortwin Gentz, FutureTap, geschrieben wurde: https://github.com/futuretap/FTLinearActivityIndicator
Dadurch wird der Indikator wieder genau dort platziert, wo er zum Zeitpunkt der Veröffentlichung des iPhone X war. Viele würden sich an den Indikator vom Typ Knight Rider erinnern.
Diese Bibliothek ist für Swift 4.2 verfügbar, daher müssen Sie die Swift -Spracheinstellungen wie hier beschrieben ändern: Typ 'NSAttributedStringKey' (auch bekannt als 'NSString') hat kein Mitglied 'font'.