2012-02-16 59 views
4

我想實現一個自定義的UIView,這基本上是一個餡餅菜單(類似蛋糕分成片)。UIBezierPath和applytransform

爲此,我試圖從中心畫一個圓和一系列線,就像圖表輪中的光線一樣。

我已經成功繪製了圓形,並且現在我想繪製劃分切片圓的線。

這是我到目前爲止有:

-(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的道路上似乎並沒有做任何事情。正確繪製的第一個路徑手勢和下面的手勢不受旋轉的影響。基本上我看到的只是一條路。檢查屏幕截圖http://img837.imageshack.us/img837/9757/iossimulatorscreenshotf.png

謝謝你的幫助!

回答

4

在轉換之前,您正在繪製路徑(使用stroke)。路徑只是一個數學表示。這不是「在屏幕上」的線條。您不能通過修改關於它的數據來移動已經繪製的內容。

只需將[aPath stroke]pathFrom:to:中移出並放在applyTransform:之後即可。

+0

只是添加到這個答案,這裏不是問題,但一定要在UIBezierPath上調用ClosePath方法。否則,路徑將被繪製,但不會被轉換。 – Legoless 2013-06-17 09:30:57