मैंने देखा है कि सफारी और मेल जैसे कुछ ऐप स्टेटस बार (फोन के सबसे ऊपर बार) में एक लोडिंग इंडिकेटर दिखाते हैं, जब वे नेटवर्क एक्सेस कर रहे होते हैं। क्या एसडीके ऐप्स में भी ऐसा ही करने का कोई तरीका है, या क्या यह केवल Apple है?
मैंने देखा है कि सफारी और मेल जैसे कुछ ऐप स्टेटस बार (फोन के सबसे ऊपर बार) में एक लोडिंग इंडिकेटर दिखाते हैं, जब वे नेटवर्क एक्सेस कर रहे होते हैं। क्या एसडीके ऐप्स में भी ऐसा ही करने का कोई तरीका है, या क्या यह केवल Apple है?
जवाबों:
यह UIApplication में है:
उद्देश्य सी के लिए:
शुरू:
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
समाप्त:
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
तेजी के लिए:
शुरू
UIApplication.shared.isNetworkActivityIndicatorVisible = true
समाप्त
UIApplication.shared.isNetworkActivityIndicatorVisible = false
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
// एक लाइनर के रूप में
UIApplication.sharedApplication().networkActivityIndicatorVisible = true
मैंने निम्न मैक्रोज़ को बहुत उपयोगी पाया है!
#define ShowNetworkActivityIndicator() [UIApplication sharedApplication].networkActivityIndicatorVisible = YES
#define HideNetworkActivityIndicator() [UIApplication sharedApplication].networkActivityIndicatorVisible = NO
तो आप बस ShowNetworkActivityIndicator();
या HideNetworkActivityIndicator();
अपने ऐप के भीतर से कॉल कर सकते हैं (जब तक हेडर पाठ्यक्रम में शामिल है!)।
मैंने एक सिंगलटन लिखा था, जो हो रहा है, उसका एक काउंटर रखते हुए कई कनेक्शनों की समस्या को हल करता है (जब कनेक्शन वापस आता है तो स्थिति को दूर करने के लिए लेकिन एक अन्य अभी भी सक्रिय है):
हेडर फ़ाइल:
#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];
}
एक बार जब आपका नेटवर्क कॉल हो जाता है, तो आपको गतिविधि संकेतक को छिपाने का भी ध्यान रखना होगा।
यदि आप उपयोग करते हैं AFNetworking
, तो आपको बहुत कुछ करने की आवश्यकता नहीं है।
AppDelegate
कक्षा में निम्नलिखित बदलाव करें :
आयात AFNetworking/AFNetworkActivityIndicatorManager.h
इसे अंदर डालें didFinishLaunchingWithOptions:
[[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES]
जैसा कि कई लोगों ने कहा है कि iPhone X के लिए कोई नेटवर्क गतिविधि संकेतक नहीं है और संभवत: पायदान के साथ अन्य नए iPhones हैं।
मैं ऑर्टविन गेंट्ज़, FutureTap द्वारा लिखित इस अविश्वसनीय पुस्तकालय में आया: https://github.com/futuretap/FTLinearActivityIndicator
यह संकेतक को ठीक पीछे रखता है, जहां यह iPhone X शुरू में जारी किया गया था, तो कई को नाइट राइडर प्रकार के संकेतक याद होंगे।
यह लाइब्रेरी स्विफ्ट 4.2 के लिए उपलब्ध है, इसलिए आपको यहां बताई गई स्विफ्ट भाषा सेटिंग्स को बदलना होगा: टाइप 'NSAttributedStringKey' (उर्फ 'NSString') का कोई सदस्य 'फ़ॉन्ट' नहीं है