Не удается получить доступ к UIBezierPath в массиве NSMutable - PullRequest
0 голосов
/ 02 апреля 2012

, поэтому у меня есть [NSMutableArray * paths], который содержит UIBezierPaths, которые соответствуют каждому отдельному пути, нарисованному на экране. У меня также есть другой массив цветов NSMutable, который содержит соответствующий цвет для пути. Проблема, с которой я столкнулся, заключается в том, что хотя два массива изменяются, и я вижу, как увеличивается число обоих, следующий метод drawRect, похоже, рисует только последний путь в массиве. Я перебрал много вопросов и, исходя из того, что я прочитал до сих пор, эта проблема, кажется, доставляет нам новичков и в основном из-за несоответствия типов. Я даже пытался Typecast возвращение, и это было бесполезно. Вот мой код от drawRect

 int cnt = paths.count; 

if (cnt != 0)
{
    for(int i = 0; i < cnt; i++)
    {
        NSLog(@"Drawing path:%i", i);

        UIColor *color;

        color = [colors objectAtIndex:i];
        [color setStroke];


        UIBezierPath *path = [paths objectAtIndex:i];
        path.lineWidth = 2;

        [path stroke];
    }
}

каждый раз, когда я вызываю [self setNeedsDisplay], он стирает весь мой экран.

Правильно ли я считаю, что не обращаюсь с моим

UIBezierPath *path = [paths objectAtIndex:i];

хорошо

Большое спасибо и заранее.

UPDATE:

Я перерыл еще несколько кодов, и теперь кажется, что есть еще одна возможность, что ARC выпускает содержимое моего массива NSMutable. Я попытался сделать следующее и получил ошибку компилятора.

[paths retain];

1 Ответ

0 голосов
/ 23 января 2013

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

- (void)drawRect:(CGRect)rect {

    [brushPattern setStroke];
    UIBezierPath *drawPath = [UIBezierPath bezierPath];
    drawPath.lineCapStyle = kCGLineCapRound;
    drawPath.miterLimit = 0;
    drawPath.lineWidth = thisLineWidth;

    for (UIBezierPath *path in pathArray)
        [drawPath appendPath:path];

    UIBezierPath *path = [self pathForCurrentLine];
    if (path) 
        [drawPath appendPath:path];


    [drawPath stroke];


}

- (UIBezierPath*)pathForCurrentLine {


    UIBezierPath *path = [UIBezierPath bezierPath];
    [path moveToPoint:startPoint];
    [path addLineToPoint:endPoint];

    return path;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...