Как нарисовать анимируемую линейку с Quartz2D? - PullRequest
2 голосов
/ 28 марта 2010

Я бы хотел нарисовать линии простой линейки с помощью Quartz2D, просто для практики.

Поскольку я понятия не имею о программной работе с векторной графикой на iPhone, может, кто-нибудь подскажет мне хороший учебник для начала?

1 Ответ

4 голосов
/ 29 марта 2010

Как указывает Пламен, документацию Quartz 2D стоит прочитать. Кроме того, примечания к курсу доступны в Интернете (формат VoodooPad) для моего курса по разработке для iPhone, где я посвящаю целый класс рисованию Quartz 2D. Образец приложения QuartzExamples , который я создал, показывает некоторые более продвинутые концепции рисования, но образец Apple QuartzDemo - лучшее место, чтобы начать видеть, как можно сделать простое рисование.

В качестве примера рисования галочек для линейки ниже приведен код, который я использовал для создания чего-то подобного:

NSInteger minorTickCounter = majorTickInterval;
NSInteger totalNumberOfTicks = totalTravelRangeInMicrons / minorTickSpacingInMicrons;
CGFloat minorTickSpacingInPixels = currentHeight / (CGFloat)totalNumberOfTicks;

CGContextSetStrokeColorWithColor(context, [MyView blackColor]);

for (NSInteger currentTickNumber = 0; currentTickNumber < totalNumberOfTicks; currentTickNumber++)
{
    CGContextMoveToPoint(context, leftEdgeForTicks + 0.5, round(currentTickNumber * minorTickSpacingInPixels) + 0.5);

    minorTickCounter++;
    if (minorTickCounter >= majorTickInterval)
    {
        CGContextAddLineToPoint(context, round(leftEdgeForTicks + majorTickLength) + 0.5, round(currentTickNumber * minorTickSpacingInPixels) + 0.5);
        minorTickCounter = 0;               
    }
    else
    {
        CGContextAddLineToPoint(context, round(leftEdgeForTicks + minorTickLength) + 0.5, round(currentTickNumber * minorTickSpacingInPixels) + 0.5);
    }
}

CGContextStrokePath(context);   

, где currentHeight - высота области, которую нужно покрыть, а [MyView blackColor] просто возвращает CGColorRef, представляющий черный цвет.

...