Анимация представлений и Windows
NSViewAnimation
класс является подклассом NSAnimation
это обеспечивает удобный способ анимировать аспекты Вашего представления и объектов окна, включая следующее:
Смените положение кадра.
Измените размер кадра
Измените непрозрачность объекта и постепенно появитесь он или.
Процесс анимации представления
Вы используете объекты Animation представления немного отличающимся способом, чем Вы делаете регулярный NSAnimation
объекты. Единственный объект Animation представления может управлять процессом анимации для многократных представлений и окон одновременно. Вместо того, чтобы устанавливать методы использования атрибутов объекта Animation, Вы вместо этого создаете словарь атрибутов анимации для каждого представления или окна, которое Вы хотите изменить. Каждый словарь указывает цель действия (представление или окно), и эффекты, Вы хотите примениться к той цели. Для установки других факторов, таких как продолжительность и кривая синхронизации анимации, Вы продолжаете использовать методы NSAnimation
.
Словарь атрибутов анимации имеет только одно требуемое значение: целевой объект. Вы добавляете этот объект к словарю с помощью NSViewAnimationTargetKey
ключ. Присутствие одного только этого ключа, тем не менее, не изменяет представление или окно. Для внесения изменений необходимо включать один или несколько дополнительных ключей для указания желаемого поведения.
Если Вы выбираете, можно выполнить многократные действия с объектом единой цели одновременно. Например, можно изменить размеры представления, сменить его положение на экране и постепенно появиться он или одновременно. Следующие разделы показывают Вам, как выполнить каждое из этих действий отдельно для простоты. Для выполнения их обоих просто добавьте все соответствующие ключи к словарю атрибутов.
Изменение прямоугольника кадра
Изменение прямоугольника кадра представления или окна позволяет Вам изменить размеры и изменить местоположение того объекта относительно его родителя. В случае представлений это означает менять положение и размер представления в его суперпредставлении. В случае окон это означает менять положение и размер окна на рабочем столе. Таблица 1 перечисляет ключи и значения, которые Вы поместили бы в словарь атрибутов для изменения прямоугольника кадра.
Ключ | Значение | Описание |
---|---|---|
|
| Идентифицирует |
|
| Содержит прямоугольник начального кадра целевого объекта. |
|
| Содержит прямоугольник конечного кадра целевого объекта. |
Постепенно появляющиеся объекты и
Если Вы хотите скрыть представление или окно, вместо того, чтобы иметь объект внезапно исчезают, можно использовать анимацию представления, чтобы заставить тот объект постепенно исчезнуть. Точно так же можно использовать подобный тип анимации представления для создания объекта видимым снова. При постепенном появлении представления назад, размер прямоугольника конечного кадра должен быть ненулевым; если это не, представление остается скрытым. Таблица 2 перечисляет ключи и значения, которые Вы поместили бы в словарь атрибутов для постепенного появления объекта или.
Ключ | Значение | Описание |
---|---|---|
|
| Идентифицирует |
|
| Содержит одну из следующих строковых констант: |
Пример анимации представления
Перечисление 1 иллюстрирует основное использование объекта Animation представления. Метод действия устанавливает словари атрибута для двух объектов другого представления и затем выполняет анимацию каждый раз, когда происходит действие. Для первого объекта представления объект Animation смещает источник представления 50 модулями вдоль каждой оси. Для второго представления объект Animation уменьшает тип телосложения для обнуления, одновременно исчезая представление, пока это не полностью скрыто. Анимация использует пользовательскую кривую синхронизации и продолжительность, но использует режим блокирования значения по умолчанию, блокирующий ввод данных пользователем на основном потоке, пока анимация не завершена.
Перечисление 1 , Анимирующее два объекта NSView
- (IBAction)startAnimations:(id)sender |
{ |
// firstView, secondView are outlets |
NSViewAnimation *theAnim; |
NSRect firstViewFrame; |
NSRect newViewFrame; |
NSMutableDictionary* firstViewDict; |
NSMutableDictionary* secondViewDict; |
{ |
// Create the attributes dictionary for the first view. |
firstViewDict = [NSMutableDictionary dictionaryWithCapacity:3]; |
firstViewFrame = [firstView frame]; |
// Specify which view to modify. |
[firstViewDict setObject:firstView forKey:NSViewAnimationTargetKey]; |
// Specify the starting position of the view. |
[firstViewDict setObject:[NSValue valueWithRect:firstViewFrame] |
forKey:NSViewAnimationStartFrameKey]; |
// Change the ending position of the view. |
newViewFrame = firstViewFrame; |
newViewFrame.origin.x += 50; |
newViewFrame.origin.y += 50; |
[firstViewDict setObject:[NSValue valueWithRect:newViewFrame] |
forKey:NSViewAnimationEndFrameKey]; |
} |
{ |
// Create the attributes dictionary for the second view. |
secondViewDict = [NSMutableDictionary dictionaryWithCapacity:3]; |
// Set the target object to the second view. |
[secondViewDict setObject:secondView forKey:NSViewAnimationTargetKey]; |
// Shrink the view from its current size to nothing. |
NSRect viewZeroSize = [secondView frame]; |
viewZeroSize.size.width = 0; |
viewZeroSize.size.height = 0; |
[secondViewDict setObject:[NSValue valueWithRect:viewZeroSize] |
forKey:NSViewAnimationEndFrameKey]; |
// Set this view to fade out |
[secondViewDict setObject:NSViewAnimationFadeOutEffect |
forKey:NSViewAnimationEffectKey]; |
} |
// Create the view animation object. |
theAnim = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray |
arrayWithObjects:firstViewDict, secondViewDict, nil]]; |
// Set some additional attributes for the animation. |
[theAnim setDuration:1.5]; // One and a half seconds. |
[theAnim setAnimationCurve:NSAnimationEaseIn]; |
// Run the animation. |
[theAnim startAnimation]; |
// The animation has finished, so go ahead and release it. |
[theAnim release]; |
} |