Как показать индикатор загрузки в верхней строке состояния

ios cocoa-touch

43021 просмотра

7 ответа

25161 Репутация автора

Я заметил, что некоторые приложения, такие как Safari и Mail, показывают индикатор загрузки в строке состояния (панель на самой верхней части телефона), когда они обращаются к сети. Есть ли способ сделать то же самое в SDK-приложениях, или это только Apple?

Автор: rustyshelf Источник Размещён: 03.10.2008 01:00

Ответы (7)


195 плюса

45167 Репутация автора

Решение

Это в UIApplication:

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

для быстрого:

UIApplication.shared.isNetworkActivityIndicatorVisible = true
Автор: Stephen Darlington Размещён: 03.10.2008 01:06

30 плюса

14654 Репутация автора

Я нашел следующие макросы довольно полезными!

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

Таким образом, вы можете просто позвонить ShowNetworkActivityIndicator();или HideNetworkActivityIndicator();из своего приложения (до тех пор, пока заголовок будет включен, конечно!).

Автор: Michael Waterfall Размещён: 17.11.2009 06:51

25 плюса

5162 Репутация автора

Я написал синглтон, который решает проблему множественных подключений, сохраняя счетчик того, что происходит (чтобы не удалять статус при возврате соединения, а еще один еще активен):

Файл заголовка:

#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];
    }
Автор: Resh32 Размещён: 16.11.2012 08:18

19 плюса

3378 Репутация автора

Для этого нужно сделать один код строки:

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
Автор: asish Размещён: 29.11.2012 10:33

2 плюса

342 Репутация автора

Также может быть полезно убедиться, что вы используете его в основном потоке, так как он связан с пользовательским интерфейсом.

dispatch_async(dispatch_get_main_queue(), ^{
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
});
Автор: Sevren Размещён: 13.03.2015 07:49

5 плюса

136 Репутация автора

Вам необходимо позаботиться о том, чтобы скрыть индикатор активности, как только будет выполнен сетевой вызов.

Если вы используете AFNetworking, вам не нужно много делать.

Сделайте следующие изменения в AppDelegateклассе:

  1. Импортировать AFNetworking/AFNetworkActivityIndicatorManager.h

  2. Поместите это в didFinishLaunchingWithOptions:

[[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES]

Автор: Babu Lal Размещён: 17.02.2016 05:59

0 плюса

163 Репутация автора

Как говорили многие, нет индикатора сетевой активности для iPhone X и, возможно, для других новых iPhone с меткой.

Я наткнулся на эту невероятную библиотеку, написанную Ortwin Gentz, FutureTap: https://github.com/futuretap/FTLinearActivityIndicator

Он помещает индикатор прямо туда, где он был, когда iPhone X был изначально выпущен, многие запомнят индикатор типа Knight Rider.

Эта библиотека доступна для Swift 4.2, поэтому вам нужно будет изменить параметры Swift Language, как описано здесь: Type 'NSAttributedStringKey' (aka 'NSString') не имеет шрифта '

Автор: erickva Размещён: 08.11.2018 02:45
32x32