zoukankan      html  css  js  c++  java
  • IOS开发 图形绘制,绘制线条,矩形,和垂直和居中绘制文字

    概述

      吐槽下IOS下 的图形绘图,代码冗长,不得不自己重新封装方法。整理形成本文。

    绘制线

    // 绘制直线
    + (void)toDrawLineFromX:(CGFloat)x1 Y:(CGFloat)y1 toX:(CGFloat)x2 toY:(CGFloat)y2 context:(CGContextRef)con{
        CGContextMoveToPoint(con, x1, y1);
        CGContextAddLineToPoint(con, x2, y2);
        CGContextSetLineWidth(con, 1);
        CGContextStrokePath(con);
    }

    绘制矩形

    //绘制矩形 ,fillColor填充色
    + (void)toDrawRect:(CGRect)rectangle color:fillColor context:(CGContextRef)ctx{
        
        //创建路径并获取句柄
        CGMutablePathRef
        path = CGPathCreateMutable();
        //将矩形添加到路径中
        CGPathAddRect(path,NULL,
                      rectangle);
        //获取上下文
        //将路径添加到上下文
        
        CGContextAddPath(ctx,
                         path);
        
        //设置矩形填充色
        [fillColor setFill];
        //矩形边框颜色
        [[UIColor
          whiteColor] setStroke];
        //边框宽度
        CGContextSetLineWidth(ctx,0);
        //绘制
        CGContextDrawPath(ctx,
                          kCGPathFillStroke);
        CGPathRelease(path);
    }

    垂直和居中绘制文字

    ///绘制文字,rect1指定矩形,绘制文字在这个矩形水平和垂直居中
    + (void)toDrawTextWithRect:(CGRect)rect1 str:(NSString*)str1 context:(CGContextRef)context{
        if( str1 == nil || context == nil)
            return;
        
        CGContextSetLineWidth(context, 1.0);
        CGContextSetRGBFillColor (context, 0.01, 0.01, 0.01, 1);
        
        //段落格式
        NSMutableParagraphStyle *textStyle = [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy];
        textStyle.lineBreakMode = NSLineBreakByWordWrapping;
        textStyle.alignment = NSTextAlignmentCenter;//水平居中
        //字体
        UIFont  *font = [UIFont boldSystemFontOfSize:22.0];
        //构建属性集合
        NSDictionary *attributes = @{NSFontAttributeName:font, NSParagraphStyleAttributeName:textStyle};
        //获得size
        CGSize strSize = [str1 sizeWithAttributes:attributes];
        CGFloat marginTop = (rect1.size.height - strSize.height)/2;
        //垂直居中要自己计算
        CGRect r = CGRectMake(rect1.origin.x, rect1.origin.y + marginTop,rect1.size.width, strSize.height);
        [str1 drawInRect:r withAttributes:attributes];
    }

    如何使用

      假设把上面的方法放入到一个类  DrawUtil 中,我们可以通过 DrawUtil 来调用方法。

      定义: #define drawLine(x1,y1,x2,y2,con) [DrawUtil toDrawLineFromX:x1 Y:y1 toX:x2 toY:y2 context:con]

       //获得上下文

      CGContextRef con = UIGraphicsGetCurrentContext();

         CGContextClearRect(con, rect);

      //画线,

      drawLine(x,y,x+rectWidth,y,con);

      //矩形

      [DrawUtil toDrawRect:CGRectMake(x*unitWidth+1, y*unitHeight+1,unitWidth-1, unitHeight-1) color:[UIColor whiteColor] context:con];

      //文字

      [DrawUtil toDrawTextWithRect:rect1 str:@"你" context:context];

     

  • 相关阅读:
    使用 ASP.NET Core 创建 Web API及链接sqlserver数据库
    SQLPrompt 最新版下载地址
    雷柏键鼠对码程序
    罗技无线鼠标接收器无法配对的详细解决办法
    Windows10安装NTP服务器
    查看udp端口及占用程序
    国人开发的api测试工具 ApiPost
    无法调用到appcode下的类
    Android 实时文件夹
    android 当ListView滚动时自动调用 onCheckedChanged 导致CheckBox 状态不停变化 的解决办法
  • 原文地址:https://www.cnblogs.com/vir56k/p/5595531.html
Copyright © 2011-2022 走看看