当 UIView或CALayers不可用时,使用performSelector:withObject:afterDelay作为动画目的是个不错的主意吗?
更具体地说,我正在使用MKOverlayRenderer,它可以显示类似于UIView的内容。我想为这个MKOverlayRenderer
的动作制作动画(只想到一个进度条)。在我的实现中,我只是在很短的时间间隔内重复发送performSelector:withObject:afterDelay
到更新MKOverlayRenderer的位置。
它工作得很好,但我担心性能,因为CPU使用率从~0%上升到15%(如果我将延迟设置为0.5秒)和90%(延迟= 0.02)。
是否还有其他选项,或者我可以忽略CPU峰值?
答案 0 :(得分:0)
我不确定MKOverlayRenderer的具体内容,但您可以像这样创建NSTimer:
@property (nonatomic, strong) NSTimer *myTimer;
然后实例化它:
self.myTimer = [NSTimer scheduledTimerWithTimeInterval:0.5
target:self
selector:@selector(myMethod)
userinfo:nil
repeats:YES];
然后你的方法:
- (void)myMethod {
//do whatever MKOverlayRenderer animation you need
}
然后停止计时器:
[self.myTimer invalidate];
self.myTimer = nil;
但请记住,CPU过载来自您正在运行的动画,而不是计时器。