画一个形状

时间:2016-03-06 13:25:06

标签: objective-c uiview calayer uibezierpath quartz-core

我正在尝试绘制一个E形的东西,据我所知,有两种方法可以将其中一种作为路径。

我可以使用路径绘制,如下面的文档所示。 https://developer.apple.com/library/ios/documentation/2DDrawing/Conceptual/DrawingPrintingiOS/BezierPaths/BezierPaths.html

或者我可以创建一个带有UIView的矩形并用2个小方块雕刻它并通过减去这2个点来制作E.

我不确定哪种方式可以考虑效率和一切。如果还有其他更好的方法,请赐教。谢谢!

(我已经找到了很多关于在这里绘制形状的信息,但没有一个是最近的,我想最近回答)

2 个答案:

答案 0 :(得分:1)

少数可能的方法之一:

  1. 创建UIView
  2. 的子类
  3. CAShapeLayer设置为UIView的支持层。
  4. 通过添加行来配置UIBezierPath以反映您的E形状。
  5. 将UIBezierPath CGPath属性分配给CAShapeLayer的path属性。
  6. 添加视图以查看层次结构。
  7. 其他:

    1. 创建UIView
    2. 的子类
    3. 覆盖drawRect方法。
    4. 将形状/线条添加到绘图上下文以反映您的E形状。
    5. 添加视图以查看层次结构。
    6. 恕我直言,第一个解决方案会更有效率,但我通常会进入第二个解决方案。

答案 1 :(得分:0)

如果您不想使用bezier路径,可以在视图上绘制字母:

    CGContextRef context = UIGraphicsGetCurrentContext();

    // Text Drawing
    CGRect textRect = CGRectMake(CGRectGetMinX(frame) + 52, CGRectGetMinY(frame) + 26, 17, 21);
    {
        NSString* textContent = @"E"; // You can draw any letter , just replace this!
        NSMutableParagraphStyle* textStyle = NSMutableParagraphStyle.defaultParagraphStyle.mutableCopy;
        textStyle.alignment = NSTextAlignmentCenter;

        NSDictionary* textFontAttributes = @{NSFontAttributeName: [UIFont systemFontOfSize: UIFont.labelFontSize], NSForegroundColorAttributeName: UIColor.blackColor, NSParagraphStyleAttributeName: textStyle};

        CGFloat textTextHeight = [textContent boundingRectWithSize: CGSizeMake(textRect.size.width, INFINITY)  options: NSStringDrawingUsesLineFragmentOrigin attributes: textFontAttributes context: nil].size.height;
        CGContextSaveGState(context);
        CGContextClipToRect(context, textRect);
        [textContent drawInRect: CGRectMake(CGRectGetMinX(textRect), CGRectGetMinY(textRect) + (CGRectGetHeight(textRect) - textTextHeight) / 2, CGRectGetWidth(textRect), textTextHeight) withAttributes: textFontAttributes];
        CGContextRestoreGState(context);
    }

对UIVIew进行子类化并将此代码包含在drawRect方法中。