2013-02-18 73 views
1

我想畫從一個點(的UIView中心)始發線,像這樣:UIBezierPath線期一脈相承

- (void)drawRect:(CGRect)rect { 
    UIBezierPath *path = [self createPath]; 
    [path stroke]; 

    path = [self createPath]; 
    CGAffineTransform rot = CGAffineTransformMakeRotation(2 * M_PI/16); 
    [path applyTransform:rot]; 
    [path stroke]; 

    path = [self createPath]; 
    rot = CGAffineTransformMakeRotation(2 * M_PI/8); 
    [path applyTransform:rot]; 
    [path stroke]; 
} 

- (UIBezierPath *) createPath { 
    UIBezierPath *path = [UIBezierPath bezierPath]; 
    CGPoint start = CGPointMake(self.bounds.size.width/2.0f, self.bounds.size.height/2.0f); 
    CGPoint end = CGPointMake(start.x + start.x/2, start.y); 
    [path moveToPoint:start]; 
    [path addLineToPoint:end]; 
    return path; 
} 

的想法是畫在同一行,並應用旋轉(約該中心=該行的開始)。結果是這樣的:

https://dl.dropbox.com/u/103998739/bezierpath.png

兩個旋轉的線條似乎在某種程度上也抵消。圖層定位點默認爲0.5/0.5。 我在做什麼錯?

+0

請讓我知道如果你需要了解更多信息! - 否則,請注意,您可以通過單擊複選標記來「接受」答案。這標誌着問題已經解決,併爲您和答案的作者提供了一些聲譽點。 – 2013-07-13 13:40:37

回答

1

在iOS中,默認座標系原點位於圖層的左上角。 (anchorpoint與圖層及其超級圖層之間的關係相關,但不適用於圖層內的座標系。)

要將座標系的原點移動到圖層的中心,可以應用平移第一:

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextTranslateCTM(context, self.bounds.size.width/2.0f, self.bounds.size.height/2.0f); 

    UIBezierPath *path = [self createPath]; 
    [path stroke]; 

    path = [self createPath]; 
    CGAffineTransform rot = CGAffineTransformMakeRotation(2 * M_PI/16); 
    [path applyTransform:rot]; 
    [path stroke]; 

    path = [self createPath]; 
    rot = CGAffineTransformMakeRotation(2 * M_PI/8); 
    [path applyTransform:rot]; 
    [path stroke]; 
} 

- (UIBezierPath *) createPath { 
    UIBezierPath *path = [UIBezierPath bezierPath]; 
    CGPoint start = CGPointMake(0, 0); 
    CGPoint end = CGPointMake(self.bounds.size.width/4.0f, 0); 
    [path moveToPoint:start]; 
    [path addLineToPoint:end]; 
    return path; 
} 

結果:

enter image description here