2016-01-24 2 views
2

Быстрый вопрос: Этот код должен производить (среди прочего) 4 строки, перпендикулярные друг другу. Однако при запуске все линии отключены на небольшую сумму.Почему основные графические линии не совпадают?

for i in 0..<60 { 
    CGContextSaveGState(ctx) 
    CGContextTranslateCTM(ctx, rect.width/2, rect.height/2) 
    CGContextRotateCTM(ctx, CGFloat(6.0 * Double(i) * M_PI/180)) 
    CGContextSetStrokeColorWithColor(ctx, UIColor.grayColor().CGColor) 
    CGContextMoveToPoint(ctx, 50, 50) 
    if (i % 5 == 0) { 
     CGContextSetLineWidth(ctx, 3.0) 
     CGContextAddLineToPoint(ctx, 30, 30) 

    } 
    else { 
     CGContextSetLineWidth(ctx, 2.0) 
     CGContextAddLineToPoint(ctx, 40, 40) 
    } 
    CGContextStrokePath(ctx) 
    CGContextRestoreGState(ctx) 
} 

Всеобъемлющая графика Core Graphics, извините, если это просто.

С уважением, Brandon

EDIT 1:

Вот что я получаю:

Misaligned Clock Tick Marks

+0

возможно, вам следует обновить свой вопрос с маленьким изображением того, что вы получаете, и, возможно, добавить небольшое изображение, показывая, что вы хотите. – rmaddy

ответ

2

Если я правильно предполагая, вы хотите, чтобы привлечь клещей, которые выглядят как клещами на циферблате.

Если вы позволите ему провести только одну итерацию, например.

for i in 0..<1 

Вы увидите, что первый тик начинается под некоторым углом. Это происходит потому, что вы рисуете линию от (x = 50, y = 50) до (x = 30, y = 30)

Попробуйте изменить его на (x = 50, y = 0) (x = 30, у = 0)

for i in 0..<60 { 
    CGContextSaveGState(ctx) 
    CGContextTranslateCTM(ctx, rect.width/2, rect.height/2) 
    CGContextRotateCTM(ctx, CGFloat(6.0 * Double(i) * M_PI/180)) 
    CGContextSetStrokeColorWithColor(ctx, UIColor.grayColor().CGColor) 
    CGContextMoveToPoint(ctx, 50, 0) // <-- changed here 
    if (i % 5 == 0) { 
     CGContextSetLineWidth(ctx, 3.0) 
     CGContextAddLineToPoint(ctx, 30, 0) // <-- changed here 

    } 
    else { 
     CGContextSetLineWidth(ctx, 2.0) 
     CGContextAddLineToPoint(ctx, 40, 0) // <-- changed here 
    } 
    CGContextStrokePath(ctx) 
    CGContextRestoreGState(ctx) 
} 

Результат

enter image description here

+0

Во-первых, я не могу поверить, что не проверял, спасибо. Во-вторых, да, но, чтобы уместиться в остальной части моего представления, у меня должен быть CGContextMoveToPoint (ctx, 50, 50). Это заставляет строки сгибаться нечетными способами. Почему это? –

+0

@BrandonBradley Я не понимаю, почему вам нужно переместить начальную точку в CGContextMoveToPoint (ctx, 50, 50)? Если вы сделаете так, ваша линия будет (50,50) -> (30,0) и будет под углом. Если вы хотите переместить все изображение с некоторым смещением, то перед символом «for i in 0 .. <60» вы можете добавить 'CGContextTranslateCTM (ctx, 150, 50)' – euvs

+0

Чтобы получить линии против черного круга (см. picture) Я должен использовать это. В противном случае тики появляются внутри круга, но не против него. –