Не могу получить индикатор активности, чтобы показать в приложении iPhone - PullRequest
0 голосов
/ 04 января 2012

У меня есть вид, который создан в IB. внутри него у меня есть вид прокрутки, созданный программно. В представлении прокрутки я подключаюсь к веб-службе и извлекаю содержимое и изображение. Я хочу показать индикатор активности при этом. Итак, у меня есть:

- (void)viewDidLoad
{
    [super viewDidLoad];
    activityIndicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    activityIndicator.frame = CGRectMake(0.0, 0.0, 40.0, 40.0);
    activityIndicator.center = self.view.center;
    [self.view.window addSubview:activityIndicator];

И сразу после добавления прокрутки у меня появляется:

[self.view addSubview:scrollView];
// ADD Scroll View Ends


    //Add the Lisitng Image
    NSOperationQueue *queue = [NSOperationQueue new];
    NSInvocationOperation *operation = [[NSInvocationOperation alloc] 
                                        initWithTarget:self
                                        selector:@selector(loadImage) 
                                        object:nil];
    [queue addOperation:operation]; 

А в loadimage у меня есть:

- (void)loadImage {

    [activityIndicator startAnimating];

Я пытался [self.view.window addSubview: activityIndicator] ;, [self-> ScrollView addSubview: activityIndicator] ;, [self.view addSubview: activityIndicator];

но я просто не могу показать индикатор. У кого-нибудь есть идеи, что может быть не так?

Ответы [ 2 ]

5 голосов
/ 04 января 2012

Вы должны сделать это в вашем viewDidload

- (void)viewDidLoad
{
    //Start Activity Indicator View
    indicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    indicatorView.frame = CGRectMake(40.0, 20.0, 60.0, 60.0);
    indicatorView.center = self.view.center;
    [self.view addSubview:indicatorView];
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
    [indicatorView startAnimating];

    [self performSelectorInBackground:@selector(loadscroll) withObject:self];
}

Примечание: "executeSelectorInBackground" покажет вам индикатор активности в представлении, а ваш метод loadScroll будет извлекать все данные из Интернета и выполнять другую работу.

-(void)loadscroll
{
    //Your Scroll View 
        //Your other Data Manipulation even from internet
        //When data is fetched display it 
       [self removeActivityIndicator]; //To stop activity Indicator       
}

- (void)removeActivityIndicator
{
       [indicatorView stopAnimating];
}
0 голосов
/ 29 апреля 2013

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

  • Индикатор активности и функция (или метод или фрагмент кода), которую необходимо выполнить после появленияоба индикатора активности не могут работать в главном потоке.Если это так, индикатор активности не появится.Решение состоит в том, чтобы запустить индикатор активности в основном потоке и функцию в фоновом потоке.
  • Я также сталкивался со случаем, когда функция, сопровождаемая индикатором активности, не может выполняться в фоновом потоке.В моем случае это было воспроизведение музыкального файла с использованием MPMoviePlayerController, который не может быть выполнен в фоновом потоке.Чтобы решить эту проблему, я запустил индикатор активности в главном потоке, а затем использовал NSTimer для вызова моего метода после задержки, которая была достаточной для появления индикатора активности и начала анимации.
  • У меня также естьобнаружил, что индикатор активности должен вызываться в executeSelectorOnMainThread и должен добавляться как подпредставление в виде сверху данного viewController, как только он начинает анимацию.Если он не нужен, его следует удалить, вызвав метод removeFromSuperView.
...