Анимация представлений и Windows

NSViewAnimation класс является подклассом NSAnimation это обеспечивает удобный способ анимировать аспекты Вашего представления и объектов окна, включая следующее:

Процесс анимации представления

Вы используете объекты Animation представления немного отличающимся способом, чем Вы делаете регулярный NSAnimation объекты. Единственный объект Animation представления может управлять процессом анимации для многократных представлений и окон одновременно. Вместо того, чтобы устанавливать методы использования атрибутов объекта Animation, Вы вместо этого создаете словарь атрибутов анимации для каждого представления или окна, которое Вы хотите изменить. Каждый словарь указывает цель действия (представление или окно), и эффекты, Вы хотите примениться к той цели. Для установки других факторов, таких как продолжительность и кривая синхронизации анимации, Вы продолжаете использовать методы NSAnimation.

Словарь атрибутов анимации имеет только одно требуемое значение: целевой объект. Вы добавляете этот объект к словарю с помощью NSViewAnimationTargetKey ключ. Присутствие одного только этого ключа, тем не менее, не изменяет представление или окно. Для внесения изменений необходимо включать один или несколько дополнительных ключей для указания желаемого поведения.

Если Вы выбираете, можно выполнить многократные действия с объектом единой цели одновременно. Например, можно изменить размеры представления, сменить его положение на экране и постепенно появиться он или одновременно. Следующие разделы показывают Вам, как выполнить каждое из этих действий отдельно для простоты. Для выполнения их обоих просто добавьте все соответствующие ключи к словарю атрибутов.

Изменение прямоугольника кадра

Изменение прямоугольника кадра представления или окна позволяет Вам изменить размеры и изменить местоположение того объекта относительно его родителя. В случае представлений это означает менять положение и размер представления в его суперпредставлении. В случае окон это означает менять положение и размер окна на рабочем столе. Таблица 1 перечисляет ключи и значения, которые Вы поместили бы в словарь атрибутов для изменения прямоугольника кадра.

Табличные 1  Ключи для того, чтобы изменить размеры или изменить местоположение представления или окна.

Ключ

Значение

Описание

NSViewAnimationTargetKey

id

Идентифицирует NSView или NSWindow объект изменить размеры или изменить местоположение. Этот ключ требуется.

NSViewAnimationStartFrameKey

NSValue

Содержит прямоугольник начального кадра целевого объекта. NSValue объект должен содержать закодированный NSRect тип данных. Это значение обычно равно текущему кадру представления или окна. Этот ключ является дополнительным и значения по умолчанию к текущему прямоугольнику кадра целевого объекта.

NSViewAnimationEndFrameKey

NSValue

Содержит прямоугольник конечного кадра целевого объекта. NSValue объект должен содержать закодированный NSRect тип данных. Этот ключ рекомендуется; если не существующий, это принимает значение по умолчанию к текущему прямоугольнику кадра целевого объекта.

Постепенно появляющиеся объекты и

Если Вы хотите скрыть представление или окно, вместо того, чтобы иметь объект внезапно исчезают, можно использовать анимацию представления, чтобы заставить тот объект постепенно исчезнуть. Точно так же можно использовать подобный тип анимации представления для создания объекта видимым снова. При постепенном появлении представления назад, размер прямоугольника конечного кадра должен быть ненулевым; если это не, представление остается скрытым. Таблица 2 перечисляет ключи и значения, которые Вы поместили бы в словарь атрибутов для постепенного появления объекта или.

Табличные 2  Ключи для исчезновения представления или окна.

Ключ

Значение

Описание

NSViewAnimationTargetKey

id

Идентифицирует NSView или NSWindow объект изменить. Этот ключ требуется.

NSViewAnimationEffectKey

NSString

Содержит одну из следующих строковых констант: NSViewAnimationFadeInEffect делает объект видимым и NSViewAnimationFadeOutEffect скрывает его. Они вызывают изменение непрозрачность объекта в течение анимации.

Пример анимации представления

Перечисление 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];
}