Как мне исчезнуть прямоугольник за определенный промежуток времени в Какао? - PullRequest
0 голосов
/ 13 октября 2011

Я пишу приложение Cocoa для OS X, где пользователь может рисовать квадраты на экземпляре NSView, щелкая мышью.В настоящее время я заставляю квадраты исчезать через 2 секунды, используя performSelector:withObject:afterDelay: метод NSObject, чтобы вызвать перерисовку вида без включенного квадрата.

Однако вместо того, чтобы просто исчезнуть, я быкак квадраты постепенно исчезать.Я пытался использовать NSTimer, чтобы периодически вызывать перерисовку, при этом непрозрачность квадрата уменьшалась до 0 в течение 2 секунд, но это выглядит довольно не элегантно и, вероятно, неэффективно, особенно если у меня много квадратов.

Есть ли идиоматический способ сделать это?

ОБНОВЛЕНИЕ : просто чтобы прояснить, я хочу, чтобы каждый квадрат, нарисованный в виде, имел независимое затухание, начиная с точки, в которой он нарисованЯ не собираюсь затмевать весь вид.

Ответы [ 2 ]

1 голос
/ 21 октября 2011

В итоге я решил создать экземпляр CALayer для каждого квадрата вместо использования NSRectFill для рисования квадратов.Затем непрозрачность каждого экземпляра CALayer может быть независимо анимирована с использованием экземпляра CABasicAnimation.Например,

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"];
[animation setFromValue:[NSNumber numberWithFloat:1.]];
[animation setToValue:[NSNumber numberWithFloat:0.]];
[animation setDuration:2.];
[layer setOpacity:0.];
[layer addAnimation:animation forKey:@"opacity"];
0 голосов
/ 13 октября 2011

NSAnimationContext , вероятно, то, что вы ищете.

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