【发布时间】:2012-08-09 06:34:20
【问题描述】:
我在 drawRect 中有一个复杂的 Quartz 例程,用于自定义 UIView 子类。绘制可能需要几秒钟。我想在绘图时显示UIActivityIndicator。但是在绘制完成后,指示器必须停止旋转(并隐藏)。
我尝试启动指标的动画,然后使用performSelector 来创建一个简单地调用setNeedsDisplay 的自定义方法——我的想法是performSelector 会等到下一个运行循环,对吧?在这种情况下,我的指标有时间在主线程上启动。这似乎有效,但是当我将代码添加到 drawRect 的末尾以停止动画时,指示器根本不会出现,就好像动画在它有机会开始之前就结束了一样。
有什么建议吗?
我这样称呼图纸:
[self.spinner startAnimating];
[self performSelectorOnMainThread:@selector(redraw) withObject:nil waitUntilDone:YES];//tried both YES and NO here
-(void)redraw{
[self.customView setNeedsDisplay];
}
drawRect: 只是在末尾有这个:
- (void)drawRect:(CGRect)rect{
//bunch of drawing
[self.nav stopSpinner]; // reference to a controller class
}
self.nav 中的对象是这样的:
-(void)stopSpinner{
self.spinner.hidden=YES;
[self.spinner stopAnimating];
}
spinner 对象最初是这样创建的:
self.spinner=[[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]autorelease];
self.spinner.hidden=YES;
[self.viewController.view addSubview:self.spinner];
【问题讨论】:
-
向我们展示试图停止旋转的
drawRect:代码。 -
篇幅比较长,这里就不贴了;然而,函数
}之前的最后一行是发送给UIActivityIndicator的消息,以使其停止动画。 -
编辑您的问题并粘贴到该行。
-
我发现了问题并将在几秒钟内更新我的问题。微调器没有停止的问题是我忘记为
self.nav传递对正确对象的引用但现在指示器根本没有显示,可能是因为绘图仍在与指示器启动时相同的运行循环事件上发生动画
标签: iphone objective-c ipad uiview core-graphics