2013-02-18 2 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

Пожалуйста, дайте мне знать, если вам нужно больше информации! - В противном случае обратите внимание, что вы можете «принять» ответ, нажав на галочку. Это означает, что проблема решена и дает вам некоторые точки репутации и автору ответа. –

ответ

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

Смежные вопросы