//
如果在绘图的时候需要用到定时器,通常
// NSTimer 很少用于绘图,因为调度优先级比较低,并不会准时调用
- ( void )awakeFromNib
{
// 创建定时器
// [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(timeChange) userInfo:nil repeats:YES];
CADisplayLink *link = [ CADisplayLink displayLinkWithTarget : self selector : @selector (timeChange)];
// 添加主运行循环
[link addToRunLoop :[ NSRunLoop mainRunLoop ] forMode : NSDefaultRunLoopMode ];
}
// CADisplayLink: 每次屏幕刷新的时候就会调用,屏幕一般一秒刷新 60 次
// 1 秒 2 次
static int count = 0 ;
- ( void )timeChange
// NSTimer 很少用于绘图,因为调度优先级比较低,并不会准时调用
- ( void )awakeFromNib
{
// 创建定时器
// [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(timeChange) userInfo:nil repeats:YES];
CADisplayLink *link = [ CADisplayLink displayLinkWithTarget : self selector : @selector (timeChange)];
// 添加主运行循环
[link addToRunLoop :[ NSRunLoop mainRunLoop ] forMode : NSDefaultRunLoopMode ];
}
// CADisplayLink: 每次屏幕刷新的时候就会调用,屏幕一般一秒刷新 60 次
// 1 秒 2 次
static int count = 0 ;
- ( void )timeChange
{
// 注意:这个方法并不会马上调用 drawRect, 其实这个方法只是给当前控件添加刷新的标记,等下一次屏幕刷新的时候才会调用 drawRect
[ self setNeedsDisplay ];
}
绘制头像圆角的时候尽量用这个方法,因为它能狗减少内存消耗.
// NO
代表透明
UIGraphicsBeginImageContextWithOptions ( self . size , NO , 0.0 );
// 获得上下文
CGContextRef ctx = UIGraphicsGetCurrentContext ();
// 添加一个圆
CGRect rect = CGRectMake ( 0 , 0 , self . size . width , self . size . height );
CGContextAddEllipseInRect (ctx, rect);
// 裁剪
CGContextClip (ctx);
// 将图片画上去
[ self drawInRect :rect];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext ();
UIGraphicsEndImageContext ();
UIGraphicsBeginImageContextWithOptions ( self . size , NO , 0.0 );
// 获得上下文
CGContextRef ctx = UIGraphicsGetCurrentContext ();
// 添加一个圆
CGRect rect = CGRectMake ( 0 , 0 , self . size . width , self . size . height );
CGContextAddEllipseInRect (ctx, rect);
// 裁剪
CGContextClip (ctx);
// 将图片画上去
[ self drawInRect :rect];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext ();
UIGraphicsEndImageContext ();
return image;
46.绘制图片,如果图片过大无法全部显示,可以让其从顶部显示.
//
开启图形上下文
UIGraphicsBeginImageContextWithOptions(topic.pictureF.size, YES , 0.0 );
// 将下载完的 image 对象绘制到图形上下文
CGFloat width = topic.pictureF.size.width;
CGFloat height = width * image.size.height / image.size.width;
[image drawInRect:CGRectMake( 0 , 0 , width, height)];
// 获得图片
self .imageView.image = UIGraphicsGetImageFromCurrentImageContext();
// 结束图形上下文
UIGraphicsEndImageContext();
UIGraphicsBeginImageContextWithOptions(topic.pictureF.size, YES , 0.0 );
// 将下载完的 image 对象绘制到图形上下文
CGFloat width = topic.pictureF.size.width;
CGFloat height = width * image.size.height / image.size.width;
[image drawInRect:CGRectMake( 0 , 0 , width, height)];
// 获得图片
self .imageView.image = UIGraphicsGetImageFromCurrentImageContext();
// 结束图形上下文
UIGraphicsEndImageContext();
}];