博客> 框架下的Drawing类的使用记录
框架下的Drawing类的使用记录
2019-07-14 18:55 评论:0 阅读:440 Wensidun
Draw

在iOS10之后UIKit添加了一些与绘制相关的类。通过渲染、绘制路径、文字和阴影构建app的绘制环境。---- https://developer.apple.com/documentation/uikit/drawing?language=objc

Topics:

  1. 绘制画布:( Drawing Contexts)

    ™. UIGraphicsRenderer :创建图形渲染的抽象类

    ™. UIGraphicsRendererContext:与图形渲染相关的绘制环境的基类

    ™. UIGraphicsRendererFormat: 展示图形绘制画布的结构元素。

    ™. UIGraphicsImageRenderer: 用于创建核心的封面图形的图片的渲染类

    ™. UIGraphicsImageRendererContext:    与图片渲染相关的绘制环境
    
    ™. UIGraphicsImageRendererFormat: 展示图片渲染画布的结构元素。
    
    ™.UIGraphicsPDFRenderer:创建PDFs的图形渲染类
    
    ™. UIGraphicsPDFDrawingActions: 用于绘制PDF内容的block
    
    ™. UIGraphicsPDFRendererContext:    与PDF 渲染相关的绘制环境
    
    ™. UIGraphicsPDFRendererFormat: 展示PDF 渲染画布的结构元素。
  2. 路径:(Paths)

     ™. UIBezierPath:    可以在自定义视图上渲染的直线或者曲线路径
    
     ™.  UIRectFill:       填充指定矩形区域的颜色。
    
     ™.  UIRectFillUsingBlendMode:    使用指定的混合模式填充矩形区域颜色
    
     ™.  UIRectFrame: 在指定矩形区域内部绘制。
    
      ™. UIRectFrameUsingBlendMode:    使用指定的混合模式在矩形区域内绘制
  3. 字符串:(Strings)

       ™.  NSStringDrawingContext:     绘制属性字符串时度量(字体大小,文本框大小)管理
    
       ™.     NSStringDrawingOptions:  字符绘制的常量选项。
    
       ™.    UIBaselineAdjustment:     下划线常量处理
  4. 阴影: (shadow)

     ™.     NSShadow:     在绘制操作期间创建阴影
  5. 管理当前图形环境:(Drawing Context Primitives)

        ™.     UIGraphicsGetCurrentContext:     返回当前图形画布。
    
        ™.    UIGraphicsPushContext:  指定当前画布为图形画布。
    
        ™.    UIGraphicsPopContext:   从栈顶移除当前图形画布,保存之前的画布。
    
        ™.    UIGraphicsBeginImageContextWithOptions: 通过指定的选项创建一个bitmap-based图形画布。
    
        ™.     UIRectClip:   通过指定矩形区域修改当前裁剪路径

Usage:

1⃣️.图片绘制

        1.创建图形图片渲染

              UIGraphicsImageRenderer *renderer = [[UIGraphicsImageRenderer alloc]    initWithSize:CGSizeMake(200, 200)];

        2.通过图片渲染创建图片
             UIImage *image = [renderer imageWithActions:^(UIGraphicsImageRendererContext * _Nonnull context) {
             [[UIColor darkGrayColor] setStroke];
            [context strokeRect:renderer.format.bounds];
            [[UIColor colorWithRed:158/255.0 green:215/255.0 blue:245/255.0 alpha:1] setFill];
               [context fillRect:CGRectMake(1, 1, 140, 140)];
           }];

 屏幕快照 2019-02-18 下午4.32.34.png

            3.使用混合渲染模式
             UIImage *image = [renderer imageWithActions:^(UIGraphicsImageRendererContext * _Nonnull context) {
[[UIColor darkGrayColor] setStroke];
[context strokeRect:renderer.format.bounds];
[[UIColor colorWithRed:158/255.0 green:215/255.0 blue:245/255.0 alpha:1] setFill];
[context fillRect:CGRectMake(1, 1, 140, 140)];
[[UIColor colorWithRed:145/255.0 green:211/255.0 blue:205/255.0 alpha:1] setFill];
[context fillRect:CGRectMake(60, 60, 140, 140) blendMode:kCGBlendModeMultiply];

}];

 屏幕快照 2019-02-18 下午4.33.56.png

                3.使用核心图形渲染函数

                 UIImage *image = [renderer imageWithActions:^(UIGraphicsImageRendererContext * _Nonnull context) {
[[UIColor darkGrayColor] setStroke];
[context strokeRect:renderer.format.bounds];
[[UIColor colorWithRed:158/255.0 green:215/255.0 blue:245/255.0 alpha:1] setFill];
[context fillRect:CGRectMake(1, 1, 140, 140)];
[[UIColor colorWithRed:145/255.0 green:211/255.0 blue:205/255.0 alpha:1] setFill];
[context fillRect:CGRectMake(60, 60, 140, 140) blendMode:kCGBlendModeMultiply];

[[UIColor colorWithRed:203/255.0 green:222/255.0 blue:116/255.0 alpha:0.6] setFill];
CGContextFillEllipseInRect(context.CGContext, CGRectMake(60, 60, 140, 140));

}];  屏幕快照 2019-02-18 下午4.35.30.png

2⃣️. PDF渲染

                1.创建PDF图形渲染

                 UIGraphicsPDFRenderer *renderer = [[UIGraphicsPDFRenderer alloc] initWithBounds:CGRectMake(0, 0, 500, 300)];

                2.用PDF渲染器创建PDF

                NSData *pdf = [renderer PDFDataWithActions:^(UIGraphicsPDFRendererContext * _Nonnull context) {

[context beginPage]; NSDictionary attributes = @{NSFontAttributeName : [UIFont boldSystemFontOfSize:150]}; NSString text = @"Hello!"; [text drawInRect:CGRectMake(0, 0, 500, 200) withAttributes:attributes];}];

 屏幕快照 2019-02-18 下午6.05.01.png

                3. 添加页码    

NSData pdf = [renderer PDFDataWithActions:^(UIGraphicsPDFRendererContext _Nonnull context) { NSDictionary attributes = @{NSFontAttributeName : [UIFont boldSystemFontOfSize:150]}; for (int page = 1; page < 4; page++) { [context beginPage]; NSString text = [NSString stringWithFormat:@"Page %d", page]; [text drawInRect:CGRectMake(0, 0, 500, 200) withAttributes:attributes]; }}];

 屏幕快照 2019-02-18 下午6.06.33.png

                4.创建外部链接

                NSData *pdf = [renderer PDFDataWithActions:^(UIGraphicsPDFRendererContext * _Nonnull context) {

NSDictionary attributes = @{NSFontAttributeName : [UIFont boldSystemFontOfSize:150]}; NSString nextPage = @"Next Page ↠"; CGRect nextPageRect = CGRectMake(350, 250, 150, 40); NSDictionary nextPageAttributes = @{ NSFontAttributeName : [UIFont systemFontOfSize:25], NSBackgroundColorAttributeName : [UIColor redColor], NSForegroundColorAttributeName : [UIColor whiteColor] }; for (int page = 1; page < 4; page++) { [context beginPage]; NSString pageNumber = [NSString stringWithFormat:@"Page %d", page]; [pageNumber drawInRect:CGRectMake(0, 0, 500, 200) withAttributes:attributes]; [nextPage drawInRect:nextPageRect withAttributes:nextPageAttributes];

[context addDestinationWithName:[NSString stringWithFormat:@"page-%d", page]
                        atPoint:CGContextConvertPointToDeviceSpace(context.CGContext, CGPointZero)];
[context setDestinationWithName:[NSString stringWithFormat:@"page-%d", page+1]
                        forRect:CGContextConvertRectToDeviceSpace(context.CGContext, nextPageRect)];

} }];

                5.创建PDF渲染样式指定PDF作者

UIGraphicsPDFRendererFormat format = [[UIGraphicsPDFRendererFormat alloc] init]; format.documentInfo = @{ (NSString )kCGPDFContextAuthor : @"Kate Bell" }; UIGraphicsPDFRenderer *renderer = [[UIGraphicsPDFRenderer alloc] initWithBounds:CGRectMake(0, 0, 500, 300) format:format];

收藏
1
sina weixin mail 回到顶部