শীর্ষ স্থিতি বারে লোডিং সূচকটি কীভাবে প্রদর্শিত হবে


120

আমি লক্ষ্য করেছি যে সাফারি এবং মেল এর মতো কিছু অ্যাপ্লিকেশন যখন নেটওয়ার্কটি অ্যাক্সেস করছে তখন স্ট্যাটাস বারে (ফোনের একেবারে শীর্ষে বার) একটি লোডিং সূচক দেখায়। এসডিকে অ্যাপগুলিতে একই জিনিস করার কোনও উপায় আছে, বা এটি কেবল একটি অ্যাপল জিনিস?

উত্তর:


213

এটি ইউআইএ প্রয়োগের মধ্যে রয়েছে:

উদ্দেশ্য সি এর জন্য:

শুরু করুন:

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

শেষ:

[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

দ্রুত জন্য:

শুরু

UIApplication.shared.isNetworkActivityIndicatorVisible = true

শেষ

UIApplication.shared.isNetworkActivityIndicatorVisible = false

1
ধন্যবাদ যে পুরোপুরি কার্যকর। কেবলমাত্র একটি পার্শ্ব নোট: সিমুলেটরটি এই মানটিকে অগ্রাহ্য করে বলে মনে হচ্ছে, যা আমাকে প্রথমে ভাবায় যে এটি কার্যকর হয়নি।
rustyshelf

11
@ রুস্টিশেল্ফ, এটি নতুন সিমুলেটরগুলিতে প্রদর্শিত হয়।
মিঃ হুস

2
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];// ওয়ান লাইনার হিসাবে
ডেভিড ডগলাস

1
সুইফট সিনট্যাক্স ব্যবহারের জন্যUIApplication.sharedApplication().networkActivityIndicatorVisible = true
মোরিস্যান্ড্রে

2
ক্রিয়াকলাপ সূচকটি আইফোন এক্স
মেলি

30

আমি নিম্নলিখিত ম্যাক্রোগুলি বেশ কার্যকর খুঁজে পেয়েছি!

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

সুতরাং আপনি কেবল কল করতে পারেন ShowNetworkActivityIndicator();বা HideNetworkActivityIndicator();আপনার অ্যাপের মধ্যে থেকে (যতক্ষণ না শিরোনাম অবশ্যই অন্তর্ভুক্ত থাকে!)।


35
ইউআইএপ্লিকেশনটিতে কেন একটি বিভাগ সংজ্ঞায়িত করা হচ্ছে না? # ডেফিনের চেয়ে অনেক সুন্দর (এবং আরও ডিবাওজেবল) মনে হচ্ছে।
ব্যারি ওয়ার্ক

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
ধন্যবাদ @ স্ক্রোকওয়েল, সিঙ্ক্রোনাইজড ব্লক ব্যবহার করে আমি এর আরও উন্নতি করেছি - আমি এমন একটি দৌড়ের অবস্থা দেখেছি যেখানে ক্রিয়াকলাপটি সঠিকভাবে হ্রাস হয়নি।
Resh32

3
কীভাবে সহজ জিনিসগুলি করা যায় তার দুর্দান্ত উদাহরণ)
fnc12

19

এটি করার জন্য একটি একক লাইন কোড:

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

5

আপনার নেটওয়ার্ক কল হয়ে গেলে আপনাকে ক্রিয়াকলাপের সূচকটি আড়াল করার যত্ন নেওয়া দরকার।

আপনি যদি ব্যবহার করেন AFNetworkingতবে আপনার খুব বেশি কিছু করার দরকার নেই।

AppDelegateক্লাসে নিম্নলিখিত পরিবর্তনগুলি করুন :

  1. আমদানি AFNetworking/AFNetworkActivityIndicatorManager.h

  2. এটি ভিতরে রাখুন didFinishLaunchingWithOptions:

[[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES]


1
বা রিস্কিটের সাহায্যে এটি হবে # আমদানি [[এএফআরকে নেটওয়ার্কঅ্যাক্টিভিটি ইন্ডিসেটর ম্যানেজার শেয়ারড ম্যানেজার] সেটএবলড: ইয়েস];
ডিপউইন্টার

4

আইটিএস 13 এ স্থিতি দণ্ডের নেটওয়ার্ক ক্রিয়াকলাপ সূচককে অবহেলা করা হয়েছিল ।

ব্যবহার করে UIApplication.shared.isNetworkActivityIndicatorVisible = trueআর কাজ হবে না।

অবহেলা বার্তাটি বলে:

যদি ইচ্ছা হয় তবে আপনার অ্যাপ্লিকেশনটিতে একটি কাস্টম নেটওয়ার্ক ক্রিয়াকলাপ UI সরবরাহ করুন।


2

এটি ইউআই সম্পর্কিত যেহেতু আপনি এটি মূল থ্রেডে চালাচ্ছেন তা নিশ্চিত করতেও এটি সহায়ক হতে পারে।

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

0

যেমনটি অনেকে বলেছে, আইফোন এক্স এবং সম্ভবত অন্যান্য নতুন আইফোনগুলির জন্য খাঁজযুক্ত কোনও নেটওয়ার্ক ক্রিয়াকলাপের সূচক নেই।

অর্টউইন জেন্টজ, ফিউচারট্যাপের লেখা এই অবিশ্বাস্য লাইব্রেরিটি পেরিয়ে এসেছি: https://github.com / ফিউচারটাইপ / এফটিলাইনারঅ্যাক্টিভিটি ইন্ডিকেটর

প্রাথমিকভাবে আইফোন এক্স প্রকাশিত হওয়ার সময় এটি সূচকটি ঠিক সেখানে রেখেছিল, অনেকে নাইট রাইডার ধরণের সূচকটি মনে রাখবেন।

এই লাইব্রেরিতে সুইফট ৪.২-এর জন্য উপলভ্য, সুতরাং আপনার এখানে বর্ণিত অনুসারে সুইফট ল্যাঙ্গুয়েজ সেটিংস পরিবর্তন করতে হবে: টাইপ করুন 'এনএসএট্রিবিউটড স্ট্রিংকি' (ওরফে 'এনএসএসটিং') এর কোনও সদস্যের 'ফন্ট' নেই

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.