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