最近由于需要绘制界面的一些操作,用到了CALayer,需要自己去重绘layer。
- (void)drawInContext:(CGContextRef)ctx
需要自定义以上方法,这个方法告诉你当前的绘图上下文为ctx;
使用core graphics那套方法,绘制一直没有出过问题,就是类似于
CGContextAddLineToPoint(...)、CGContextStrokePath(ctx)
等等一系列的C函数。这些函数都可以在layer中成功绘制图形。
由于需要在layer上绘制一些文字。所以就需要用到UIKit中的一些绘图方法。比如:
- (void)drawAtPoint:(CGPoint)point withAttributes:(nullable NSDictionary<NSAttributedStringKey, id> *)attrs NS_AVAILABLE(10_0, 7_0);
- (void)drawInRect:(CGRect)rect withAttributes:(nullable NSDictionary<NSAttributedStringKey, id> *)attrs NS_AVAILABLE(10_0, 7_0);
在layer的重绘函数中调用这些方法,始终没有办法在layer上得到正确的显示。
使用UIKit中的绘图方法,如果不是在drawRect:方法中,你不指定当前上下文。是不知道往哪个ctx中画的。所以就用到下面两个函数
- (void)drawInContext:(CGContextRef)ctx
{
UIGraphicsPushContext(ctx); //将当前上下文的context,压到栈顶
NSString* stringNumber = @"hello world";
[stringNumber drawAtPoint:CGPointMake(20, 22) withAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:10.f],NSForegroundColorAttributeName:[UIColor blackColor]}];
UIGraphicsPopContext(); //绘图结束前pop出context
}
随手记一笔,希望帮到有同样困惑的同学~😆