0

我有一个确定的进度指示器。它就像我期望的那样工作,但在达到 maxValue 后它不会消失。我已将进度指示器设置为在 main.nib 文件中停止时不显示,我还将其输入到 awakeFromNib{} 方法中。我在例程的末尾放置了一个日志,以确保 [displayWhenStopped] 设置仍然设置为 NO 并且确实如此。

这是我的代码:

-(void)getEvents:(NSURL *)mffFile{

NSMutableArray * eventTypeResults =[[NSMutableArray alloc]init];

EWaveformRecording  *ptrToRcdFile = [EWaveformRecording openRecording:mffFile permission:readOnly user:nil convertFileFormat:NO openReadOnlyAnyway:NO];
NSArray *events = [ptrToRcdFile getEvents];
//get the size of events for the progressbar and instantiate a loop counter
NSInteger total = [events count];
int loop = 0;

//set progress bar params
[self->meter_ setUsesThreadedAnimation:YES];
[self->meter_ setControlSize:NSMiniControlSize];
[self->meter_ setMaxValue:(double)total];

for(EEvent* event in events){
    loop ++;
    if(![eventTypeResults containsObject:event.code]){
     NSLog(@"check eventNames in getEvents %@", event.code);
     [eventTypeResults addObject: event.code];
    }//end if
//display loop increment in progress bar
[self->meter_ setDoubleValue:(1000*(double)loop)/1000];
}//end for

//send the eventTypesResults array to the EventExport class
[evtPtr setEventsAvailableList:eventTypeResults];
 }

我试过的:

有和没有我不完全理解的 [setUsesThreadedAnimation];它确实减慢了进度条,使它看起来更好,但文档说只有不确定的类型应该受到动画的影响。

我尝试过使用 [开始和停止动画] 我在循环后尝试过 [setDisplayWhenStopped:NO]

非常感谢任何帮助

4

1 回答 1

0

这是我学到的。

我不应该允许进度条在不同的线程上运行,即使它看起来像是在工作,因为 NSProgressIndicator 不能再响应主线程中的设置,所以正确的做法是不实例化该方法,但是,这不是我的问题的解决方案;我做的一切都是正确的,但主线程无法重绘进度,因为它正忙于 UI 中的所有其他调用。解决方案是实现 NSRunLoop 以便循环的每次迭代都会中断主线程并重新绘制进度表,然后返回控制权。

于 2011-11-03T18:58:35.417 回答