#import "myview.h"@interface myview ()@property(nonatomic,assign) float imageY;@end@implementation myview-(instancetype)initWithFrame:(CGRect)frame{ if ([super initWithFrame:frame]) { //刷帧,默认每秒60次,不会自动启动,需要加到RunLoop中 CADisplayLink *display=[CADisplayLink displayLinkWithTarget:self selector:@selector(updateimg)]; [display addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode]; //一般用于更新非界面数据// [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateimg) userInfo:nil repeats:YES]; } return self;}-(void)updateimg{ //drawRect:方法不能由我们自己手动调用,只能由系统来调用。 //drawRect:调用的时机:当第一次显示或者一个重绘事件发生时调用。 // setNeedsDisplay方法:重新绘制,调用这个方法就会通知自定义的view重新绘制画面,调用drawRect:。 // 提示:当一个view从xib或storyboard创建出来时,会调用awakefromnib方法。 [self setNeedsDisplay];}-(void)awakeFromNib{ NSLog(@"awakefromnib");}- (void)drawRect:(CGRect)rect { self.imageY+=3; if (self.imageY>rect.size.height) { self.imageY=0; } UIImage *img=[UIImage imageNamed:@"img.jpg"]; [img drawAtPoint:CGPointMake(20, self.imageY)];}@end
运行效果:图片往下循环移动