NSView имеет протокол NSAnimatablePropertyContainer, который позволяет создавать основные анимации для представлений:
Протокол NSAnimatablePropertyContainer определяет способ добавления анимации в существующий класс с минимальным влиянием API ...Отправка сообщений «set», совместимых с кодировкой значений ключей, в прокси вызовет анимацию для автоматически анимированных свойств своего целевого объекта.
Протокол NSAnimatablePropertyContainer можно найти здесь
Недавно я использовал эту технику для изменения источника кадра:
-(void)setOrigin:(NSPoint)aPoint {
[[self animator] setFrameOrigin:aPoint];
}
Вместо вызова [view setFrameOrigin:], я создал другой метод с именем setOrigin: который затем применяет setFrameOrigin:вызов аниматора представления.
Если вам нужно изменить продолжительность анимации, вы можете сделать это следующим образом (аналогично CATransactions):
-(void)setOrigin:(NSPoint)aPoint {
[NSAnimationContext beginGrouping];
[[NSAnimationContext currentContext] setCompletionHandler:^{
...Completion Callback Code goes here...
}];
[[NSAnimationContext currentContext] setDuration:1.0];
[[self animator] setFrameOrigin:aPoint];
[NSAnimationContext endGrouping];
}
Описание NSAnimationContext здесь