2014-09-30 3 views
3

Я пытаюсь привлечь Инь-Ян в Objective-c, и мне трудно понять, как это сделать. Я создал два прямоугольника, которые связаны. Мне трудно понять, как сделать линии моей кривой прямоугольника, чтобы я мог сделать круг из них. Вот мой код до сих пор.Добавление кривой в мой прямоугольник

CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextAddRect(context, CGRectMake(60, 150, 80, 10)); 
CGContextStrokePath(context); 

CGContextAddRect(context, CGRectMake(60, 150, 190, 10)); 
CGContextStrokePath(context); 

Есть ли более простой способ создать инь-янь в Objective-C или я в правильном направлении? Я новичок в объектно-ориентированном программировании в целом.

ответ

5

Я предлагаю сделать это с помощью дуг (на самом деле, полукругов) вместо закругленных прямоугольников. Например, рассмотрим одну часть на три отдельных полукольцами:

yin yang strokes

Вы могли бы нарисовать эти дуги, как так:

CGContextAddArc(context, center.x, center.y - side/4.0, side/4.0, M_PI_2, -M_PI_2, TRUE); // red part 
CGContextAddArc(context, center.x, center.y + side/4.0, side/4.0, M_PI_2, -M_PI_2, NO); // blue part 
CGContextAddArc(context, center.x, center.y,    side/2.0, -M_PI_2, M_PI_2, YES); // dark grey stroke 

Но очевидно, что вы, вероятно, на самом деле не сделать эти штрихи, а просто заполнить их, а затем повторить этот процесс для нижней части символа:

- (void)drawRect:(CGRect)rect { 
    CGFloat side = MIN(rect.size.width, rect.size.height);      // length of the side of the square in which the symbol will rest 
    CGPoint center = CGPointMake(rect.size.width/2.0, rect.size.height/2.0); // the center of that square 

    CGContextRef context = UIGraphicsGetCurrentContext(); 

    // draw white part 

    CGContextAddArc(context, center.x, center.y - side/4.0, side/4.0, M_PI_2, -M_PI_2, TRUE); 
    CGContextAddArc(context, center.x, center.y + side/4.0, side/4.0, M_PI_2, -M_PI_2, NO); 
    CGContextAddArc(context, center.x, center.y,    side/2.0, -M_PI_2, M_PI_2, YES); 
    CGContextClosePath(context); 

    CGContextSetFillColorWithColor(context, [UIColor whiteColor].CGColor); 
    CGContextFillPath(context); 

    // draw black part 

    CGContextAddArc(context, center.x, center.y - side/4.0, side/4.0, M_PI_2, -M_PI_2, TRUE); 
    CGContextAddArc(context, center.x, center.y + side/4.0, side/4.0, M_PI_2, -M_PI_2, NO); 
    CGContextAddArc(context, center.x, center.y,    side/2.0, -M_PI_2, M_PI_2, NO); 
    CGContextClosePath(context); 

    CGContextSetFillColorWithColor(context, [UIColor blackColor].CGColor); 
    CGContextFillPath(context); 

    // draw black dot 

    CGContextAddArc(context, center.x, center.y - side/4.0, side/12.0, 0, M_PI * 2.0, YES); 
    CGContextSetFillColorWithColor(context, [UIColor blackColor].CGColor); 
    CGContextFillPath(context); 

    // draw white dot 

    CGContextAddArc(context, center.x, center.y + side/4.0, side/12.0, 0, M_PI * 2.0, YES); 
    CGContextSetFillColorWithColor(context, [UIColor whiteColor].CGColor); 
    CGContextFillPath(context); 
} 

это дает:

yin yang

+0

Спасибо! Это сработало отлично. Я все время делал это неправильно. – Cory

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