создание частиц путем маскировки изображения - PullRequest
0 голосов
/ 12 февраля 2011

Я пытаюсь создать частицы разного цвета с помощью функции CGContextClipToMask (). По какой-то причине моя первая частица, кажется, полностью показывает и обновляет свои обновления, но никакая другая частица не показывает вообще. Вот фрагмент кода:

while(i < mNextParticleIndex)
    {
        Particle* p = &mParticles[i];

        CGRect drawRect = CGRectMake(
            p->mPos.x,
            p->mPos.y,
            p->mSize,
            p->mSize);

        // try image masking
        CGContextClipToMask(context, drawRect, [mImage CGImage]);
        CGContextSetBlendMode(context, kCGBlendModeNormal);
        CGContextSetFillColor(context, CGColorGetComponents([UIColor 
            colorWithRed:p->mColor.r green:p->mColor.g blue:p->mColor.b alpha:p->mColor.a].CGColor));
        CGContextFillRect(context, drawRect);

Когда я закомментирую вызов ClipToMask, я вижу анимацию всех моих различных заливок (т. Е. Набор квадратов, заполняющих эффект частиц). Однако при вызове я вижу только первый. м отсутствует?

1 Ответ

0 голосов
/ 12 февраля 2011

По данным Кварца: «Область обрезки является частью графического состояния. Чтобы восстановить область обрезки до прежнего состояния, вы можете сохранить графическое состояние перед клипированием и восстановить графическое состояние после того, как вы закончили с обрезанным рисунком».

Итак, я вставил вызовы сохранения и восстановления вокруг моего кода в цикле while как таковой:

    CGContextSaveGState(context);
    CGContextClipToMask(context, drawRect, [mImage CGImage]);
    CGContextSetBlendMode(context, kCGBlendModeNormal);
    CGContextSetFillColor(context, CGColorGetComponents([UIColor 
        colorWithRed:p->mColor.r green:p->mColor.g blue:p->mColor.b alpha:p->mColor.a].CGColor));
    CGContextFillRect(context, drawRect);
    CGContextRestoreGState(context);
...