0

アークの作成に関する Ray Wenderlich のチュートリアルに従っていますが、エラーは発生しませんが、画面にアークが描画されません。誰かが私を正しい方向に向けることができますか?

これが私のコードです:

- (CGMutablePathRef) createArcPathFromBottomOfRect : (CGRect) rect : (CGFloat) arcHeight {

    CGRect arcRect = CGRectMake(rect.origin.x, rect.origin.y + rect.size.height - arcHeight, rect.size.width, arcHeight);

    CGFloat arcRadius = (arcRect.size.height/2) + (pow(arcRect.size.width, 2) / (8*arcRect.size.height));
    CGPoint arcCenter = CGPointMake(arcRect.origin.x + arcRect.size.width/2, arcRect.origin.y + arcRadius);

    CGFloat angle = acos(arcRect.size.width / (2*arcRadius));
    CGFloat startAngle = radians(180) + angle;
    CGFloat endAngle = radians(360) - angle;

    CGMutablePathRef path = CGPathCreateMutable();
    CGPathAddArc(path, NULL, arcCenter.x, arcCenter.y, arcRadius, startAngle, endAngle, 0);
    CGPathAddLineToPoint(path, NULL, CGRectGetMaxX(rect), CGRectGetMinY(rect));
    CGPathAddLineToPoint(path, NULL, CGRectGetMinX(rect), CGRectGetMinY(rect));
    CGPathAddLineToPoint(path, NULL, CGRectGetMinX(rect), CGRectGetMaxY(rect));

    return path;

}

- (void)drawRect:(CGRect)rect {

    CGContextRef currentContext = UIGraphicsGetCurrentContext();

    CGMutablePathRef myArcPath = [self createArcPathFromBottomOfRect:self.frame:10.0];

    CGContextSetLineWidth(currentContext, 1);
    CGFloat red[4] = {1.0f, 0.0f, 0.0f, 1.0f};
    CGContextSetStrokeColor(currentContext, red);
    /*CGContextBeginPath(currentContext);
    CGContextMoveToPoint(currentContext, 0, rect.size.height - 7);
    CGContextAddLineToPoint(currentContext, rect.size.width, rect.size.height - 7);*/
    CGContextAddPath(currentContext, myArcPath);
    CGContextClip(currentContext);
    CGContextStrokePath(currentContext);


}
4

1 に答える 1

1

2 つのエラーがあるようです。

CGMutablePathRef myArcPath = [self createArcPathFromBottomOfRect:self.frame:10.0];

前者はスーパービューの座標に関連するため、self.frameおそらくに置き換える必要があります。self.bounds

そして、おそらく削除する必要があります

CGContextClip(currentContext);

理由はわかりませんが、現在のクリップ パスを変更し、現在のパスを空のパスに設定して、次のようにCGContextStrokePath()何も描画しないようにします。

于 2013-06-30T12:46:30.517 に答える