Индикатор UIActivity не отображается - PullRequest
0 голосов
/ 03 ноября 2011

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

-(void)viewDidLoad
{
    [super viewDidLoad];

    //... all your previous charge.

    UIActivityIndicatorView *activity = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];

    activity.hidesWhenStopped = YES;

    activity.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin |
        UIViewAutoresizingFlexibleHeight |
        UIViewAutoresizingFlexibleLeftMargin |
        UIViewAutoresizingFlexibleRightMargin |
        UIViewAutoresizingFlexibleTopMargin |
        UIViewAutoresizingFlexibleWidth;

    [self.tableview addSubview:activity];

    [activity startAnimating];

    [activity performSelector:@selector(stopAnimating) withObject:nil afterDelay:0.5];

}

но ничего не появляется .. код не генерирует никаких ошибок .. так что просто wunderderingесли я что-то упустил.

Ответы [ 3 ]

1 голос
/ 03 ноября 2011

Несколько вещей, чтобы попробовать:

  • неясно, появляется ли ваш tableView и / или заполнен ли он данными. установите не белый цвет фона для tableView, если есть какие-либо сомнения относительно наличия таблицы. Если вы не видите tableView, сначала исправьте это или добавьте activityIndicatorView в качестве подпредставления другого представления, которое вы можете видеть.

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

  • убрать опции UIViewAutoResizingFlexibleWidth и UIViewAutoResizingFlexibleHeight из autoResizingMask из activityIndicatorView. Вы не хотите, чтобы activityIndicatorView изменял размер в зависимости от его суперпредставления.

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

  • избавьтесь от своего таймера, чтобы остановить анимацию, по крайней мере, пока вы не убедитесь, что видите activityIndicatorView. это странный UX ИМХО. как правило, вы должны запускать / останавливать индикатор активности на основе процесса в вашем приложении, о котором пользователи должны знать

  • аналогично, устанавливайте hidesWhenStopped = NO, пока не убедитесь, что видите activityIndicatorView.

Когда вы видите activityIndicatorView и все выглядит хорошо к вашему удовлетворению, вы можете добавить поведение, которое вам нужно.

1 голос
/ 03 ноября 2011

Вы установили его скрытым, когда он прекращает анимацию, а селектор выполнения останавливает анимацию через 0,5 секунды после запуска анимации. Кроме того, все это делается во время просмотра метода загрузки. Вы не можете гарантировать, что вид будет виден сразу после его загрузки. возможно, анимация запускается и останавливается еще до того, как представление отображается!

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

Удачи

0 голосов
/ 03 ноября 2011

Возможно, что ячейка табличного представления находится над представлением индикатора . Либо вы помещаете свой индикатор активности в tableView.tableHeaderView, либо в tableView.tableFooterView.

Или
используйте [self.view addSubview: activity];, чтобы добавить индикатор в родительское представление, а не tableView. Надеюсь, это сработает ..

...