2

我想将复杂的 UI 元素显示为带有扇区的甜甜圈,因此每个扇区都可以表示为单个 UIView。有什么方法可以将矩形 UIView 转换为弧形以适应甜甜圈轮廓?或者那是不可能的?我是一个 iOS 新手,如果您向我指出正确的文档,我将不胜感激。

4

3 回答 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 回答