2012-04-26 2 views
0

Я пытаюсь сделать эффект, когда сначала весь экран замаскирован. Когда мяч перемещается по экрану, мяч размахивает областью, в которой он находится, и области, в которых он находился, остаются разоблаченными.Сохраняйте маскирование изображения на маске анимации

У меня есть следующий код:

CALayer * ball = [CALayer layer]; 
ball.bounds = CGRectMake(0, 0, 42, 42); 
ball.position = [[[alphabet controls] objectAtIndex:0] CGPointValue]; 
ball.contents = (id)([UIImage imageNamed:@"done.png"].CGImage); 
[self.layer addSublayer:ball]; 

[self.layer setMask:ball]; 

CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"position"]; 
anim.path = path; 
anim.repeatCount = HUGE_VALF; 
anim.duration = 8.0; 
[ball addAnimation:anim forKey:@"race"]; 

Эта анимация маски все представление и показывает только то, что находится за шаровым слоем. Мой вопрос: как я могу разоблачить части экрана, которые были обнаружены?

ответ

0

Хммм.

Что вы хотите - это изображение, содержащее все пиксели, которыми проходила форма шара.

Если вы анимировали шар с помощью анимации на основе рамки, вы можете создать изображение в градациях серого (или 1 бит) и установить его в качестве содержимого слоя маски. Затем, когда вы перемещаете мяч, вы можете нарисовать его в изображении вашей маски с каждым фреймом.

Я не уверен, как получить такой же эффект при использовании Core-анимации.

Вы можете сделать свою маску CAShapeLayer, создать CGPath, который описывает весь путь вашего шара, и сделать этот путь для вашего слоя формы. Если ваш шар круглый, вы можете установить толщину линии слоя формы на размер шарика. Это сработает. Однако, если у вас мяч неправильной формы, этот подход не сработает. Кварцевая графика на iOS не имеет никакого способа, которым я знаю, чтобы погладить путь с помощью кисти произвольной формы.

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