it-swarm.com.de

So zeigen Sie das Ladekennzeichen in der oberen Statusleiste an

Ich habe festgestellt, dass einige Apps wie Safari und Mail eine Ladeanzeige in der Statusleiste (die Leiste ganz oben im Telefon) anzeigen, wenn sie auf das Netzwerk zugreifen. Gibt es eine Möglichkeit, das Gleiche in SDK-Apps zu tun, oder handelt es sich dabei nur um Apple?

116
rustyshelf

Es ist in UIApplication:

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

für Swift:

UIApplication.shared.isNetworkActivityIndicatorVisible = true
205

Ich habe die folgenden Makros sehr nützlich gefunden!

#define ShowNetworkActivityIndicator() [UIApplication sharedApplication].networkActivityIndicatorVisible = YES
#define HideNetworkActivityIndicator() [UIApplication sharedApplication].networkActivityIndicatorVisible = NO

Sie können also einfach ShowNetworkActivityIndicator(); oder HideNetworkActivityIndicator(); aus Ihrer App heraus aufrufen (sofern der Header natürlich enthalten ist!).

30

Ich habe ein Singleton geschrieben, das das Problem mehrerer Verbindungen löst, indem es einen Zähler für das, was passiert, hält (um zu vermeiden, dass der Status gelöscht wird, wenn eine Verbindung wiederhergestellt wird, eine andere jedoch 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];
    }
25
Resh32

Ein einzeiliger Code, um dies zu tun:

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
19
asish

Sie müssen darauf achten, dass die Aktivitätsanzeige auch ausgeblendet wird, wenn Ihr Netzwerkanruf abgeschlossen ist.

Wenn Sie AFNetworking verwenden, müssen Sie nicht viel tun.

Nehmen Sie die folgenden Änderungen in AppDelegate Class vor:

  1. AFNetworking/AFNetworkActivityIndicatorManager.h importieren

  2. Schreibe dies in didFinishLaunchingWithOptions:

[[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES]

5
Babu Lal

Es kann auch hilfreich sein, sicherzustellen, dass Sie es im Haupt-Thread ausführen, da es sich auf die Benutzeroberfläche bezieht. 

dispatch_async(dispatch_get_main_queue(), ^{
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
});
2
Sev

Wie viele schon gesagt haben, gibt es keine Netzwerkaktivitätsanzeige für das iPhone X und wahrscheinlich für die anderen neuen iPhones mit der Kerbe.

Ich habe diese unglaubliche Bibliothek von Ortwin Gentz, FutureTap, entdeckt: https://github.com/futuretap/FTLinearActivityIndicator

Dadurch wird der Indikator wieder auf den Stand gebracht, an dem er sich befand, als das iPhone X ursprünglich veröffentlicht wurde. Viele würden sich an den Indikator des Knight Rider erinnern.

Diese Bibliothek ist für Swift 4.2 verfügbar. Sie müssen daher die Swift Language-Einstellungen wie hier beschrieben ändern: Typ 'NSAttributedStringKey' (auch 'NSString' genannt) hat kein Member 'font'

0
erickva

Die Netzwerkaktivitätsanzeige in der Statusleiste war in iOS 1 veraltet.

Die Verwendung von UIApplication.shared.isNetworkActivityIndicatorVisible = true funktioniert nicht mehr.

Die Verfallsmeldung lautet:

Geben Sie bei Bedarf eine benutzerdefinierte Netzwerkaktivitäts-Benutzeroberfläche in Ihre App ein.

0