как придать линии CGPoint уникальные цвета Xcode

Очень простое приложение XCode для iPhone. Пустой экран, рисовать линии, каждая линия должна иметь уникальный цвет, заданный с помощью генератора случайных чисел. У меня есть код, который дает мне случайные цвета, но я не могу заставить линии сохранять цвет по отдельности. Каждый раз, когда экран рисуется, цвет меняется для всех строк в моем массиве.

вот код для установки цвета для каждой строки:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{    
    for (UITouch *t in touches) {
    // Is this a double-tap?
        if ([t tapCount] > 1) {
            [self clearAll];
            return;
    }

    CGFloat hue = ( arc4random() % 256 / 256.0 );  //  0.0 to 1.0
    CGFloat saturation = ( arc4random() % 128 / 256.0 ) + 0.5;  //  0.5 to 1.0, away from white
    CGFloat brightness = ( arc4random() % 128 / 256.0 ) + 0.5;  //  0.5 to 1.0, away from black

    Colour=[UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:1];        

    // Use the touch object (packed in an NSValue) as the key
    NSValue *key = [NSValue valueWithPointer:t];

    // Create a line for the value
    CGPoint loc = [t locationInView:self];
    Line *newLine = [[Line alloc] init]; 
    [newLine setBegin:loc];
    [newLine setEnd:loc];
    [newLine setCOLOUR:Colour];

    // Put pair in dictionary
    [linesInProcess setObject:newLine forKey:key];
    [newLine release];
}
}

вот код, который я использовал для рисования линий.

- (void)drawRect:(CGRect)rect {
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, 10.0);
    CGContextSetLineCap(context, kCGLineCapRound);

    for (Line *line in completeLines) {
        [Colour set];
        CGContextMoveToPoint(context, [line begin].x, [line begin].y);
        CGContextAddLineToPoint(context, [line end].x, [line end].y);
        CGContextStrokePath(context);
    }

    // Draw lines in process in red
    [[UIColor redColor] set];
    for (NSValue *v in linesInProcess) {
        Line *line = [linesInProcess objectForKey:v];
        CGContextMoveToPoint(context, [line begin].x, [line begin].y);
        CGContextAddLineToPoint(context, [line end].x, [line end].y);
        CGContextStrokePath(context);
    }
}

Повторюсь: я пытаюсь придать каждой линии, нарисованной на интерфейсе, уникальный цвет. Указанный цвет задается случайным числом gen.

Благодарю за помощь, люди. :D


person ko1984    schedule 13.12.2012    source источник


Ответы (1)


В вашем drawRect в цикле через linesInProcess вы не устанавливаете цвет. Вам нужно использовать информацию о цвете в вашем линейном объекте и сбрасывать цвет в каждой итерации цикла:

CGContextSetStrokeColorWithColor(context, line.COLOUR.CGColor);

или, альтернативно

[line.COLOUR set];

То же самое относится и к вашему циклу completeLines.

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

person Mundi    schedule 13.12.2012