UIActivityIndicatorView не вращается - PullRequest
6 голосов
/ 03 апреля 2012

У меня есть проблема, когда я добавляю UIActivityIndicatorView к UIScrollView;Все работает нормально, за исключением того, что оно не начинает вращаться, пока не прокручивается UIScrollView.

Может кто-нибудь помочь мне с этой проблемой?

Спасибо.

здесьнекоторый код:

    UIActivityIndicatorView *loaderActivity = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    loaderActivity.center = CGPointMake(87/2,y+56/2);
    loaderActivity.tag=tag;
    [mainScrollView addSubview:loaderActivity];
    [loaderActivity startAnimating];
    [loaderActivity release];

Ответы [ 5 ]

6 голосов
/ 03 апреля 2012

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

3 голосов
/ 27 июня 2013

Тот факт, что это не анимация, пока вы не прокрутите в представлении прокрутки, является признаком того, что ваш вызов startAnimating происходит в фоновом потоке.Вызовы UIKit должны выполняться в главном потоке.

Вы можете убедиться, что это происходит в фоновом потоке, добавив код, подобный следующему:

if ([NSThread isMainThread]) {
    NSLog(@"Running on main thread.");
} else {
    NSLog(@"Running on background thread.");
}

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

// this code would be wherever your existing code was
[self performSelectorOnMainThread:@selector(addActivityIndicatorToView:) withObject:mainScrollView waitUntilDone:YES];

// this would be a new method in the same class that your existing code is in
- (void) addActivityIndicatorToView:(UIView*) view {
    UIActivityIndicatorView *loaderActivity = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    loaderActivity.center = CGPointMake(87/2,y+56/2);
    loaderActivity.tag=tag;
    [view addSubview:loaderActivity];
    [loaderActivity startAnimating];
    [loaderActivity release];
}
2 голосов
/ 03 апреля 2012
activityIndicator = [[UIActivityIndicatorView alloc] 
initWithFrame:CGRectMake(87/2,y+56/2);
[activityIndicator setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleWhite];
activityIndicator.tag=tag;
[mainScrollView addSubview:loaderActivity];
[activityIndicator startAnimating];
[activityIndicator release];
1 голос
/ 13 декабря 2016

У меня была проблема, когда я сделал startAnimating звонок в viewDidLoad и не работал. Я переместил вызов в viewWillAppear, и это сработало!

0 голосов
/ 03 апреля 2012

Попробуйте запустить аниматор в другом потоке.

NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(showProgress) object:nil];
[thread start];

//do whatever your want here

//call this when you want it stop animating
    [activityIndicator stopAnimating];
    [thread release];


- (void)showProgress{

    [activityIndicator startAnimating];

}
...