5

作为 iOS 绘图的初学者,我想绘制一个小工具提示容器,它由一个带有指示箭头的矩形组成。我创建了 2 个 UIBezierPaths 并使用“appendPath”将它们加入。我认为这是解决此问题的正确方法,但在挣扎了 1 天后,我不得不寻求帮助。这是我现在所在位置的屏幕截图:

UIBezierPath 截图

正如您所看到的,问题很简单,当我尝试描边连接的路径时,它不会作为一个整体被描边,而是作为单独的部分进行描边。也许有人可以指出我解决这个问题的正确方向?

这是代码:

    // Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    // create indicator path
    UIBezierPath *indicator = [[UIBezierPath alloc] init];
    // corner radius
    CGFloat radius = self.cornerRadius;
    // main path
    UIBezierPath *path;
    // format frame
    rect = CGRectMake(rect.origin.x, rect.origin.y, rect.size.width, rect.size.height - self.indicatorSize.height);
    // assign path
    path = [UIBezierPath bezierPathWithRoundedRect: rect
                                 byRoundingCorners:UIRectCornerAllCorners
                                       cornerRadii:CGSizeMake(radius, radius)];
    // x point
    CGFloat x = (rect.size.width - self.indicatorSize.width) / 2;

    [indicator moveToPoint:CGPointMake(x, rect.size.height)];
    [indicator addLineToPoint:CGPointMake(x + self.indicatorSize.width / 2, rect.size.height + self.indicatorSize.height)];
    [indicator addLineToPoint:CGPointMake(x + self.indicatorSize.width, rect.size.height)];
    // close path
    [indicator closePath];
    // append indicator to main path
    [path appendPath:indicator];

    [[UIColor redColor] setStroke];
    [path setLineWidth:2.0];
    [path stroke];
    [self.fillColor setFill];
    [path fill];
    // release indicator
    [indicator release];
}

提前致谢

4

1 回答 1

6

您需要将其全部绘制为一条路径,因为此时您告诉它您要绘制整个矩形,然后绘制一个三角形,这就是它正在做的事情。

来自 Apple UIBezierPath 文档:

[appendPath:] 将用于在 bezierPath 中创建路径的命令添加到接收器路径的末尾。此方法不会显式尝试连接两个对象中的子路径,尽管 bezierPath 中的操作可能仍会导致该效果。

所以首先它会绘制你的矩形,然后它会绘制你的三角形而不试图加入它们

于 2013-02-26T18:39:55.273 回答