5

iOS 描画の初心者である私は、インジケーターの矢印が付いた四角形で構成される小さなツールチップ コンテナーを描画したいと考えていました。2 つの UIBezierPath を作成し、「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

すべてを 1 つのパスとして描画する必要があります。これは、現時点で、長方形全体を描画してから三角形を描画するように指示しているためです。それが実行されていることです。

Apple UIBezierPath ドキュメントから:

[appendPath:] は、bezierPath でパスを作成するために使用されるコマンドを受信者のパスの末尾に追加します。このメソッドは、2 つのオブジェクトのサブパスを明示的に接続しようとはしませんが、bezierPath での操作によってその効果が生じる可能性があります。

したがって、最初に長方形を描画し、次にそれらを結合しようとせずに三角形を描画します

于 2013-02-26T18:39:55.273 に答える