我想将复杂的 UI 元素显示为带有扇区的甜甜圈,因此每个扇区都可以表示为单个 UIView。有什么方法可以将矩形 UIView 转换为弧形以适应甜甜圈轮廓?或者那是不可能的?我是一个 iOS 新手,如果您向我指出正确的文档,我将不胜感激。
问问题
881 次
3 回答
0
UIView
's 总是矩形的,除非你对其应用仿射变换(但我仍然认为你不能得到弧形)。我认为你最好的选择是通过子类化 UIView 并实现drawRect
或使用在 UIView 内绘制弧线CAShapeLayer
。
于 2013-03-17T20:15:51.200 回答
0
在不知道更多关于你究竟想要做什么的情况下,我会冒险并建议你使用 CGDrawing 方法在矩形视图中绘制你的甜甜圈段。
为此,您将特别使用以下内容:
CGPathAddArc()
CGPathAddLineToPoint()
CGPathMoveToPoint()
此代码绘制填充弧:
-(void)drawFilledArc:(CGContextRef)context innerRadius:(CGFloat)rIn outterRadius (CGFloat)rOut
startAngle:(double)startAng endAngle:(double)endAng drawColor:(UIColor *)color
{
float x1, y1;
CGFloat centerX = originX;
CGFloat centerY = originY;
CGContextSaveGState(context);
CGMutablePathRef path = CGPathCreateMutable();
CGContextSetLineWidth(context, lineWidth);
getChartWheelCoord(centerX, centerY, startAng, rIn, &x1, &y1);
CGPathMoveToPoint(path, NULL, x1, y1);
getChartWheelCoord(centerX, centerY, startAng, rOut, &x1, &y1);
CGPathAddLineToPoint(path, NULL, x1, y1);
CGPathAddArc(path, NULL, centerX, centerY, rOut, radians(-startAng), radians(-endAng), YES);
getChartWheelCoord(centerX, centerY, endAng, rIn, &x1, &y1);
CGPathAddLineToPoint(path, NULL, x1, y1);
CGPathAddArc(path, NULL, centerX, centerY, rIn, radians(-endAng), radians(-startAng), NO);
CGPathCloseSubpath(path);
CGContextSetFillColorWithColor(context, color.CGColor);
CGContextAddPath(context, path);
CGContextDrawPath(context, kCGPathFillStroke);
CGPathRelease(path);
CGContextRestoreGState(context);
}
于 2013-03-17T20:16:39.120 回答
0
那么你可以通过以下方式实现你想要的。
1 如果您的 UI 元素不必对 Click 或 touch Events 负责,那么您可以使用 Core-Graphics 绘制它。
2 如果您的 UI 元素必须响应用户交互事件,那么您可以创建一个 UIView 并添加任意数量的自定义按钮作为 UIview 的子视图以及弧形或扇形图像(自定义按钮的图像)。
于 2013-03-17T20:17:30.577 回答