在drawInContext调用UIKit中的一些绘图方法失败的原因

最近由于需要绘制界面的一些操作,用到了CALayer,需要自己去重绘layer。

- (void)drawInContext:(CGContextRef)ctx

需要自定义以上方法,这个方法告诉你当前的绘图上下文为ctx;
使用core graphics那套方法,绘制一直没有出过问题,就是类似于

CGContextAddLineToPoint(...)、CGContextStrokePath(ctx)

等等一系列的C函数。这些函数都可以在layer中成功绘制图形。
由于需要在layer上绘制一些文字。所以就需要用到UIKit中的一些绘图方法。比如:

- (void)drawAtPoint:(CGPoint)point withAttributes:(nullable NSDictionary *)attrs NS_AVAILABLE(10_0, 7_0);
- (void)drawInRect:(CGRect)rect withAttributes:(nullable NSDictionary *)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
}

随手记一笔,希望帮到有同样困惑的同学~

你可能感兴趣的:(在drawInContext调用UIKit中的一些绘图方法失败的原因)