将UIView显示为弧形

时间:2013-03-17 20:06:40

标签: ios objective-c uiview transformation

我想将一个复杂的UI元素显示为有扇区的有点甜甜圈,因此每个扇区都可以表示为单个UIView。 有没有办法将矩形UIView转换成圆弧以适应圆环轮廓?或者这是不可能的? 我是一个完整的iOS菜鸟,如果你给我指出正确的文档,我将非常感激。

3 个答案:

答案 0 :(得分:0)

UIView总是长方形,除非你对它应用仿射变换(但我仍然认为你不能得到弧形)。我认为你最好的选择是通过继承UIView并实现drawRect或使用CAShapeLayer来在UIView中绘制弧。

答案 1 :(得分: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);
}

答案 2 :(得分:0)

那么你可以通过以下方式实现你想要的目标。

1如果您的UI元素无需对单击或触摸事件负责,则可以绘制它   使用Core-Graphics。

2如果您的UI元素必须响应用户交互事件,那么您可以创建UIView   并将所需的自定义按钮作为子视图添加到UIview以及弧形或扇形图像(自定义按钮的图像)。