在iOS 中想到定时循环就会想到NSTime和CADisplayLink
NSTime可以设置指定的时间以及是否需要循环。
CADisplayLink则是默认循环直至其失效。其循环间隔为每秒60次,这个当然与程序运行时的帧率有关。
下面举个简单的例子。
#import "CADisplayLinkViewTest.h"
@interface CADisplayLinkViewTest()
@property (strong , nonatomic) CADisplayLink *displayLink;
@end
@implementation CADisplayLinkViewTest
- (void)startAnimation
{
if (self.displayLink == nil) {
self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(run)];
[self.displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
}
}
static int i = 0;
- (void)run
{
NSLog(@"%i",i++);
}
- (void)completeAnimation
{
[self.displayLink invalidate];
self.displayLink = nil;
}
@end
调用方法:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
CADisplayLinkViewTest *view = [[CADisplayLinkViewTest alloc] initWithFrame:CGRectMake(0, 0, 100, 50)];
[self.view addSubview:view];
view.backgroundColor = [UIColor grayColor];
__weak CADisplayLinkViewTest *tmp = view;
[tmp startAnimation];
[UIView animateWithDuration:1.0 animations:^{
tmp.frame = CGRectMake(100, 500, 100, 70);
} completion:^(BOOL finished) {
if (finished) {
[tmp completeAnimation];
}
}];
}