Замедлить или приостановить NSAnimationContext
У меня есть NSAnimationContext (просто представление с прокруткой), который я хотел бы замедлить и / или приостановить всякий раз, когда курсор входит в представление. Я уже реализовал обнаружение, когда это происходит - теперь мне просто нужно выяснить, как замедлить анимацию, которая уже выполняется. Я понял, как это сделать с помощью CALayers, но мне нужно использовать прокси-сервер аниматора, который не может использовать несколько представлений AppKit в этой анимации, поэтому Core Animation не будет работать. Кто-нибудь знает как это сделать? Есть ли способ отследить NSAnimationContexts и затем изменить их позже?
Вот подраздел моего кода, первый блок циклически вызывается. Каждый раз, когда одна агния завершается, начинается следующая.
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context){
context.duration = pixels/speed;
[[currentTweetView animator] setFrame:endRect];
} completionHandler:^{
[currentTweetView removeFromSuperview];
currentTweetView = nil;
[self nextAnimationWithAnimationIndex:currentIndex];
}];
Вот код в mouseEntered: метод. Всякий раз, когда это вызывается, никогда не вызывается ни завершение, а приложение останавливается.
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context){
[[[self.subviews objectAtIndex:0] animator] setFrame:finalRect];
context.duration = 100.0;
} completionHandler:^{
NSLog(@"done");
}];
Кроме того, есть ли способ завершить NSAnimationContext раньше и не вызывать обработчик завершения?
1 ответ
Я думаю, что если вы просто установите свойство через animator
опять прокси, под другим NSAnimationContext,
он заменит анимацию, которая была в процессе. Это было бы аналогично перенаправлению анимации (например, на новое место назначения).