Замедление и ускорение анимации с помощью CoreAnimation

Я пытаюсь применить к своему приложению эффект замедленного воспроизведения, очень похожий на то, как вы можете замедлить большинство графических эффектов Mac OS, нажав Shift.

В моем приложении используется CoreAnimation, поэтому я подумал, что это не должно быть большим делом: установите скорость на более медленное значение (например, 0,1 ) и верните его на 1 как только я закончу, и я иду.

К сожалению, это неправильный путь. Замедление работает отлично, однако, когда я хочу вернуться к нормальной скорости, оно возобновляется, как если бы скорость была 1 все время. По сути, это означает, что если я удерживал Shift достаточно долго, как только я его отпускаю, анимация мгновенно завершается.

Я нашел страницу Технического контроля качества, на которой объясняется, как приостанавливать и возобновлять анимацию, но я не могу понять это правильно, если речь идет не о полной приостановке анимации. Я определенно не очень хорошо умею копировать время.

Как правильно замедлить, а затем возобновить анимацию с помощью CoreAnimation?

Вот полезный код:

-(void)flagsChanged:(NSEvent *)theEvent
{
    CALayer* layer = self.layer;
    [CATransaction begin];
    CATransaction.disableActions = YES;
    layer.speed = (theEvent.modifierFlags & NSShiftKeyMask) ? 0.1 : 1;
    [CATransaction commit];
}
5
задан zneak 10 March 2012 в 17:49
поделиться