美文网首页iOS开发
在drawInContext调用UIKit中的一些绘图方法失败的

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

作者: Calvin_Shen | 来源:发表于2018-05-11 14:32 被阅读60次

    最近由于需要绘制界面的一些操作,用到了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
    }
    

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

    相关文章

      网友评论

        本文标题:在drawInContext调用UIKit中的一些绘图方法失败的

        本文链接:https://www.haomeiwen.com/subject/wxufdftx.html