如何在ObjectiveC和Cocoa中为macOS绘制半圆形的冒泡?

时间:2016-08-01 22:58:22

标签: objective-c macos user-interface cocoa

如何在ObjectiveC和Cocoa(在macOS,而不是iOS)上绘制半圆形的冒泡?目前,我能够制作一个非常简单的圆圈,符合我的需求:

NSRect rect = CGRectMake(location.x, location.y, 2*radius, 2*radius)
rect.cornerRadius = radius

这是一个完整的圆圈,但我如何制作一个完整阴影的半圆?我使用这种绘制圆圈的特殊方法的原因是因为我很容易添加" rect"到CAShapeLayer的框架,这是

的参数
[[self layer] addSublayer:rect];

take,其中self引用当前的CocoaView。

示例:

semicircle

最后,这需要在Core Animation中完成,而不是使用iOS框架(正如标签所暗示的那样)。

1 个答案:

答案 0 :(得分:1)

这是使用UIBezierPath绘制弧的代码。 它不完全是你想要的,但你可以改变半径

     - (void)drawRect:(CGRect)rect
    {
        UIBezierPath *blueHalf = [UIBezierPath bezierPath];
        [blueHalf addArcWithCenter:CGPointMake(100, 100) radius:90.0 startAngle:-M_PI_2 endAngle:M_PI_2 clockwise:YES];
        [blueHalf setLineWidth:4.0];
        [[UIColor blueColor] setStroke];
        [blueHalf stroke];
   }

如果您想在Core Graphics中执行此操作:

- (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSetLineWidth(context, 4);

    CGContextSetStrokeColorWithColor(context, [[UIColor blueColor] CGColor]);
    CGContextAddArc(context, 100, 100, 90, -M_PI_2, M_PI_2, FALSE);
    CGContextStrokePath(context);
}

enter image description here