【问题标题】:UIActivityIndicatorView is not animating, why?UIActivityIndi​​catorView 没有动画,为什么?
【发布时间】:2014-08-02 15:06:57
【问题描述】:

我有一个 UIActivityIndi​​catorView,我在收到来自通知中心的通知时启动和停止它。虽然我收到通知并通过“performSelectorOnMainThread”调用开始和停止,但它不会开始动画,也不会变得可见。

这是我的代码:

-(void)stopAnimation:(id)sender {
    if( _saveActivityIndicatorView.isAnimating ) {
        [_saveActivityIndicatorView stopAnimating];
    }
}

-(void)startAnimation:(id)sender {
    if( !_saveActivityIndicatorView.isAnimating ) {
        [_saveActivityIndicatorView startAnimating];
    }
}

-(void)saveStarted{
    NSLog(MRVaccinationEventsUpdateStarted);
    [self performSelectorOnMainThread:@selector(startAnimation:) withObject:self waitUntilDone:YES];
}

-(void)saveCompleted{
    NSLog(MRVaccinationEventsUpdateCompleted);
    [self performSelectorOnMainThread:@selector(stopAnimation:) withObject:self waitUntilDone:YES];
}

这就是我发布和观察通知的方式(都在同一个文件中):

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(saveStarted)
                                             name:MRVaccinationEventsUpdateStarted
                                           object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(saveCompleted)
                                             name:MRVaccinationEventsUpdateCompleted
                                           object:nil];

[[NSNotificationCenter defaultCenter] postNotificationName:MRVaccinationEventsUpdateStarted object:nil];

[[NSNotificationCenter defaultCenter] postNotificationName:MRVaccinationEventsUpdateCompleted object:nil];

请注意,我确实收到了通知。 这段代码有什么问题?

【问题讨论】:

  • 最可能的解释:_saveActivityIndicatorView 为零
  • 这不是解决问题,而是在对performSelector... 的两次调用中:1)为什么将self 传递给withObject: 和2)为什么将YES 传递给@987654328 @?
  • @jrturton 不,它绝对不是 nil,而是故事板中的一个 IBOutlet
  • @maddy 同时设置为nilNO 也不起作用...
  • @mradlmaier 仅仅因为_saveActivityIndicatorView 来自一个出口并不意味着它不能是nil。您是否真的在运行时进行检查以确定?

标签: ios uiactivityindicatorview


【解决方案1】:

这是因为开始和停止动画在同一个循环中。

[[NSNotificationCenter defaultCenter] postNotificationName:MRVaccinationEventsUpdateStarted object:nil];

[[NSNotificationCenter defaultCenter] postNotificationName:MRVaccinationEventsUpdateCompleted object:nil];

你应该在一段时间后发布第二个通知,比如

/// 三秒

delayInSeconds = 3;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    [[NSNotificationCenter defaultCenter] postNotificationName:MRVaccinationEventsUpdateCompleted object:nil];
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    相关资源
    最近更新 更多