我正在尝试绘制一个E形的东西,据我所知,有两种方法可以将其中一种作为路径。
我可以使用路径绘制,如下面的文档所示。 https://developer.apple.com/library/ios/documentation/2DDrawing/Conceptual/DrawingPrintingiOS/BezierPaths/BezierPaths.html
或者我可以创建一个带有UIView的矩形并用2个小方块雕刻它并通过减去这2个点来制作E.
我不确定哪种方式可以考虑效率和一切。如果还有其他更好的方法,请赐教。谢谢!
(我已经找到了很多关于在这里绘制形状的信息,但没有一个是最近的,我想最近回答)
答案 0 :(得分:1)
少数可能的方法之一:
UIView
。CAShapeLayer
设置为UIView的支持层。CGPath
属性分配给CAShapeLayer的path
属性。其他:
UIView
。drawRect
方法。恕我直言,第一个解决方案会更有效率,但我通常会进入第二个解决方案。
答案 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方法中。