답변:
UIApplication에 있습니다.
목표 C의 경우 :
스타트:
[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 및 노치가있는 다른 새로운 iPhone에 대한 네트워크 활동 표시기가 없습니다.
FutureTap 인 Ortwin Gentz가 작성한이 놀라운 라이브러리를 발견했습니다 : https://github.com/futuretap/FTLinearActivityIndicator
표시기를 iPhone X가 처음 출시되었을 때의 위치로 되 돌리면 많은 사람들이 Knight Rider 유형의 표시기를 기억할 것입니다.
이 라이브러리는 Swift 4.2에서 사용할 수 있으므로 여기에 설명 된대로 Swift 언어 설정을 변경해야합니다. Type 'NSAttributedStringKey'(일명 'NSString')에는 'font'멤버가 없습니다.