शीर्ष स्थिति पट्टी में लोडिंग संकेतक कैसे दिखाएं


120

मैंने देखा है कि सफारी और मेल जैसे कुछ ऐप स्टेटस बार (फोन के सबसे ऊपर बार) में एक लोडिंग इंडिकेटर दिखाते हैं, जब वे नेटवर्क एक्सेस कर रहे होते हैं। क्या एसडीके ऐप्स में भी ऐसा ही करने का कोई तरीका है, या क्या यह केवल Apple है?

जवाबों:


213

यह UIApplication में है:

उद्देश्य सी के लिए:

शुरू:

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

समाप्त:

[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

तेजी के लिए:

शुरू

UIApplication.shared.isNetworkActivityIndicatorVisible = true

समाप्त

UIApplication.shared.isNetworkActivityIndicatorVisible = false

1
धन्यवाद जो पूरी तरह से काम करता है। बस एक पक्ष ध्यान दें: सिम्युलेटर इस मूल्य की उपेक्षा करता है, जिसने मुझे लगता है कि पहली बार में यह काम नहीं किया।
देहातीशेल

11
@rustyshelf, यह नए सिमुलेटरों में प्रदर्शित होता है।
MrHus

2
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];// एक लाइनर के रूप में
डेविड डगलस

1
स्विफ्ट सिंटैक्स उपयोग के लिएUIApplication.sharedApplication().networkActivityIndicatorVisible = true
मोरीसेंड्रे

2
गतिविधि संकेतक iPhone X पर स्थिति पट्टी में नहीं दिखाई देगा
मेल्ली

30

मैंने निम्न मैक्रोज़ को बहुत उपयोगी पाया है!

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

तो आप बस ShowNetworkActivityIndicator();या HideNetworkActivityIndicator();अपने ऐप के भीतर से कॉल कर सकते हैं (जब तक हेडर पाठ्यक्रम में शामिल है!)।


35
UIApplication पर एक श्रेणी को परिभाषित क्यों नहीं किया गया? एक #define की तुलना में बहुत अच्छे (और अधिक बहस योग्य) लगता है।
बैरी वार्क

25

मैंने एक सिंगलटन लिखा था, जो हो रहा है, उसका एक काउंटर रखते हुए कई कनेक्शनों की समस्या को हल करता है (जब कनेक्शन वापस आता है तो स्थिति को दूर करने के लिए लेकिन एक अन्य अभी भी सक्रिय है):

हेडर फ़ाइल:

#import <Foundation/Foundation.h>

@interface RMActivityIndicator : NSObject

-(void)increaseActivity;
-(void)decreaseActivity;
-(void)noActivity;

+(RMActivityIndicator *)sharedManager;

@end

और आवेदन:

#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

उदाहरण:

    [[RMActivityIndicator sharedManager]increaseActivity];
    [NSURLConnection sendAsynchronousRequest:urlRequest queue:self.networkReceiveProcessQueue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
    {
        [[RMActivityIndicator sharedManager]decreaseActivity];
    }

3
धन्यवाद @Schrockwell, मैंने सिंक्रनाइज़ किए गए ब्लॉकों का उपयोग करके इसे और बेहतर किया - मैंने एक दौड़ की स्थिति देखी जहां गतिविधि ठीक से कम नहीं हुई थी।
रेश्ह 32

3
कैसे सरल काम करना मुश्किल है इसका अच्छा उदाहरण)
fnc12

19

एक एकल लाइन कोड ऐसा करने के लिए:

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

5

एक बार जब आपका नेटवर्क कॉल हो जाता है, तो आपको गतिविधि संकेतक को छिपाने का भी ध्यान रखना होगा।

यदि आप उपयोग करते हैं AFNetworking, तो आपको बहुत कुछ करने की आवश्यकता नहीं है।

AppDelegateकक्षा में निम्नलिखित बदलाव करें :

  1. आयात AFNetworking/AFNetworkActivityIndicatorManager.h

  2. इसे अंदर डालें didFinishLaunchingWithOptions:

[[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES]


1
या टॉयलेट के साथ यह #import [[AFRKNetworkActivityIndicatorManager साझा प्रबंधक] सेट किया जाएगा: हाँ];
दीपविन

4

स्थिति बार नेटवर्क गतिविधि संकेतक को iOS 13 में पदावनत किया गया था ।

प्रयोग करने UIApplication.shared.isNetworkActivityIndicatorVisible = trueसे काम नहीं चलेगा।

पदावनति संदेश कहता है:

यदि वांछित हो तो अपने ऐप में एक कस्टम नेटवर्क गतिविधि UI प्रदान करें।


2

यह सुनिश्चित करने के लिए भी सहायक हो सकता है कि आप इसे मुख्य थ्रेड पर चला रहे हैं क्योंकि यह UI से संबंधित है।

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

0

जैसा कि कई लोगों ने कहा है कि iPhone X के लिए कोई नेटवर्क गतिविधि संकेतक नहीं है और संभवत: पायदान के साथ अन्य नए iPhones हैं।

मैं ऑर्टविन गेंट्ज़, FutureTap द्वारा लिखित इस अविश्वसनीय पुस्तकालय में आया: https://github.com/futuretap/FTLinearActivityIndicator

यह संकेतक को ठीक पीछे रखता है, जहां यह iPhone X शुरू में जारी किया गया था, तो कई को नाइट राइडर प्रकार के संकेतक याद होंगे।

यह लाइब्रेरी स्विफ्ट 4.2 के लिए उपलब्ध है, इसलिए आपको यहां बताई गई स्विफ्ट भाषा सेटिंग्स को बदलना होगा: टाइप 'NSAttributedStringKey' (उर्फ 'NSString') का कोई सदस्य 'फ़ॉन्ट' नहीं है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.