使用performSelector:withObject:afterDelay进行动画制作?

时间:2015-08-14 16:26:37

标签: ios objective-c mkoverlay

UIView或CALayers不可用时,使用performSelector:withObject:afterDelay作为动画目的是个不错的主意吗?

更具体地说,我正在使用MKOverlayRenderer,它可以显示类似于UIView的内容。我想为这个MKOverlayRenderer的动作制作动画(只想到一个进度条)。在我的实现中,我只是在很短的时间间隔内重复发送performSelector:withObject:afterDelay更新MKOverlayRenderer的位置

它工作得很好,但我担心性能,因为CPU使用率从~0%上升到15%(如果我将延迟设置为0.5秒)和90%(延迟= 0.02)。

是否还有其他选项,或者我可以忽略CPU峰值?

1 个答案:

答案 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过载来自您正在运行的动画,而不是计时器。