5

基本的にパイメニュー(スライスに分割されたケーキのようなもの)であるカスタム UIView を実装しようとしています。

そのために、チャートのホイールの光線のように、中心から円と一連の線を描こうとしています。

円の描画に成功したので、円をスライスで分割する線を描画したいと思います。

これは私がこれまでに持っているものです:

-(void)drawRect:(CGRect)rect{

     [[UIColor blackColor] setStroke];
     CGContextRef ctx = UIGraphicsGetCurrentContext();

    CGFloat minDim = (rect.size.width < rect.size.height) ? rect.size.width : rect.size.height;

    CGRect circleRect =  CGRectMake(0, rect.size.height/2-minDim/2, minDim, minDim); 

    CGContextAddEllipseInRect(ctx, circleRect);
    CGContextSetFillColor(ctx, CGColorGetComponents([[UIColor yellowColor] CGColor]));
    CGContextFillPath(ctx);

    CGPoint start = CGPointMake(0, rect.size.height/2);
    CGPoint end = CGPointMake(rect.size.width, rect.size.height/2);

    for (int i = 0; i < MaxSlices(6); i++){

        CGFloat degrees = 1.0*i*(180/MaxSlices(6));
        CGAffineTransform rot = CGAffineTransformMakeRotation(degreesToRadians(degrees));

        UIBezierPath *path = [self pathFrom:start to:end];
        [path applyTransform:rot];

    }
 }   

- (UIBezierPath *) pathFrom:(CGPoint) start to:(CGPoint) end{

    UIBezierPath*    aPath = [UIBezierPath bezierPath];
    aPath.lineWidth = 5;
    [aPath moveToPoint:start];
    [aPath addLineToPoint:end];
    [aPath closePath];
    [aPath stroke];
    return aPath;
}

問題は、パスの applyTransform が何もしていないように見えることです。最初のパス ジェストは正しく描画され、次のパスは回転の影響を受けません。基本的に、私が見ているのはただ 1 つのパスです。ここでスクリーンショットを確認してくださいhttp://img837.imageshack.us/img837/9757/iossimulatorscreenshotf.png

ご協力ありがとうございました!

4

1 に答える 1

4

strokeパスを変換する前に( を使用して) パスを描画しています。パスは単なる数学的表現です。それは「画面上」の線ではありません。データを変更しても、既に描画したものを移動することはできません。

を移動し[aPath stroke]て のpathFrom:to:後に置くだけapplyTransform:です。

于 2012-02-16T15:18:35.780 に答える