Базовая информация о версии анимации

Содержание:

OS X v10.6

Новые классы и свойства

Было много новых классов, добавленных в OS X v10.6:

CAEmitterLayer

CAEmitterLayer класс обеспечивает систему эмиттера частицы для Базовой Анимации. Частицы определяются экземплярами CAEmitterCell.

CAEmitterCell

CAEmitterCell класс представляет один источник частиц, испускаемых в a CAEmitterLayer. Эмиттерная ячейка определяет направление, в котором они испускают и свойства испускаемых частиц. Эмиттерные ячейки могут иметь массив подъячеек, позволяющий самим частицам испустить частицы.

CAGradientLayer

CAGradientLayer класс рисует цветовой градиент по своему цвету фона, заполняя форму уровня (включая скругленные углы).

CAReplicatorLayer

CAReplicatorLayer класс создает конкретное количество копий его подуровней (исходный слой), каждая копия, потенциально имеющая геометрические, временные и преобразования цвета, применилась к нему.

CAShapeLayer

CAShapeLayer класс рисует кубический Сплайн Безье в своем координатном пространстве. Форма составляется между содержанием уровня и его первым подуровнем.

CATransformLayer

CATransformLayer объекты используются для создания истинных 3D иерархий слоев, а не сглаженной модели рендеринга иерархии, используемой другими классами CALayer..

CAValueFunction

CAValueFunction класс обеспечивает более гибкие средние значения применения функций к значениям свойств во время анимации. Функция значения определяет дополнительную трансформацию, применяющуюся к интерполированному значению, прежде чем это будет установлено на уровне представления.

Новые свойства и методы

Дополнительные возможности были добавлены к следующим классам:

  • CALayer

    • Теперь только синтезирует методы доступа свойства для отмеченных свойств @dynamic в их реализации класса. Для назад совместимости мы сохраняем предыдущее поведение для исполнимых программ, соединенных на версиях ОС до 10,6.

    • Новые свойства слоя: точки привязки, contentsCenter, geometryFlipped, minificationFilterBias

    • Новые методы уровня:-contentsAreFlipped,-needsDisplay,-displayIfNeeded,-needsLayout, +needsDisplayForKey,-animationKeys

    • Новый метод делегата уровня:-layoutSublayersOfLayer:

    • Новый фильтр минификации: kCAFilterTrilinear. Включает более высокому качеству субдискретизацию OpenGL изображений. Требует, чтобы добавочная стоимость субдискретизации изображения для создания множественного отображения расположила в виде пирамиды каждый раз изменения образа. Некоторые видеокарты только поддерживают это для изображений с двухмерным питанием.

    • Теперь возможно анимировать Ваши собственные свойства. Посмотрите Анимацию Ваших Собственных Свойств для получения дополнительной информации.

  • CAConstraint

    • Новые свойства: sourceName, offset, scale, sourceAttribute, и sourceName.

  • CATransaction

    • Добавленный lock и unlock методы для управления атомарностью свойства

    • Добавленные средства доступа метода для существующего disableActions и animationDuration Свойства KVC

    • Добавленные новые свойства KVC и средства доступа метода: animationTimingFunction, completionBlock

  • CAMediaTimingFunction

    • Новая константа, kCAMediaTimingFunctionDefault, определяет константу, используемую по умолчанию для свойств.

  • CAPropertyAnimation

    • Новое свойство: valueFunction.

  • CATiledLayer

    • Когда рендеринг размещает единственный плиточный слой рядом drawInContext: метод может теперь быть вызван на многократные потоки одновременно. (Это всегда было задокументированным поведением, но OS X v10.5 ограничил каждый экземпляр уровня тем, чтобы быть вызванным на единственном потоке в любом моменте времени.)

  • CATextLayer

    • fontSize и setForegroundColor: свойства теперь animatable. Неявные анимации включены для этих свойств, но только для приложений, соединенных на OS X v10.6 или позже.

    • Трехлинейная фильтрация (с конфигурируемым смещением фильтра) также поддерживается для плиточных слоев. Однако, выбор уровня детализации в настоящее время на многоугольник, а не на пиксель.

  • CARenderer

    • Предоставленный CGLContextObj теперь сохраняется для времени жизни CARenderer экземпляр.

  • CAOpenGLLayer

    • Этот класс может теперь вызвать метод получения подкласса с OpenGL, контекстно-зависимым к ненулевому объекту кадрового буфера. Это означает, что код OpenGL, использующий объекты кадрового буфера для внеэкранного рендеринга, должен всегда сохранять и восстанавливать начальную привязку кадрового буфера.

    • Связанный с этими изменениями, подклассы больше не требуются, чтобы сбрасывать контекст OpenGL после рендеринга, CAOpenGLLayer делает это. Однако, для обеспечения назад совместимости OS X v10.5 подклассам рекомендуют вызвать базовое внедрение drawInCGLContext:pixelFormat:forLayerTime:displayTime: метод после рендеринга, например:

      - (void)drawInCGLContext:(CGLContextObj)ctx pixelFormat:(CGLPixelFormatObj)pf
          forLayerTime:(CFTimeInterval)t displayTime:(const CVTimeStamp *)ts
      {
          // rendering code…
       
          // ensure context is flushed if required
          [super drawInCGLContext:ctx pixelFormat:pf forLayerTime:t displayTime:ts];
      }

Изменения средства рендеринга

Ограничения на размер изображений уровня были удалены. (В OS X v10.5 изображения тихо проигнорированы, когда они больше, чем максимальный размер текстуры текущей видеокарты.)

Одноуровневые уровни, пересекающиеся в 3D пространстве, теперь представляются правильно — пересекающиеся уровни разрешены в многократные фрагменты непересечения прежде чем быть представленным (т.е. составление композита, и фоновые фильтры будут применены в правильном порядке.)

Анимация собственных свойств

Анимация пользовательских свойств слоя теперь поддерживается. Переопределение needsDisplayForKey:: отметить свойства Ваше использование подкласса уровня для рисования его содержания. Анимации, предназначающиеся для тех свойств, тогда вызовут Ваш drawInContext: метод, который вызовут на копии уровня, содержащего значения текущей анимации.

Семя WWDC 2007 года

Осуждаемый API

CAMediaTiming постоянный kCAFillModeFrozen был осужден и заменен kCAFillModeForwards. Посмотрите Новый API для получения дополнительной информации.

Новый API

Новый API был добавлен к нескольким Базовым классам Анимации.

Новые методы получателя

Базовая Анимация API теперь использует isОбразец средства доступа свойства для булево свойств. Затронутые классы и новые методы get:

  • CAAnimation

    • isRemovedOnCompletion

    • isAdditive

    • isCumulative

  • CIFilterAdditions

    • isEnabled

  • CALayer

    • isHidden

    • isDoubleSided

    • isOpaque

  • CAOpenGLLayer

    • isAsynchronous

  • CATextLayer

    • isWrapped

Класс CAMediaTiming

Следующий API был добавлен к CAMediaTiming:

 
@protocol CAMediaTiming
 
/* Deprecate kCAFillModeFrozen. Replace with: */
 
CA_EXTERN NSString * const kCAFillModeForwards;
CA_EXTERN NSString * const kCAFillModeBackwards;
CA_EXTERN NSString * const kCAFillModeBoth;
 
/* `forwards' is equivalent to existing `frozen', `backwards' clamps time
 * values before zero to zero, `both' clamps time values at both ends
 * of the object's time space. */
 
@end

CAKeyframeAnimation

Следующий API был добавлен к CAKeyframeAnimation:

 
@interface CAKeyframeAnimation
 
/* Defines whether objects animating along paths rotate to match the
 * path tangent. Possible values are `auto' and `autoReverse'. Defaults
 * to nil. The effect of setting this property to a non-nil value when
 * no path object is supplied is undefined. `autoReverse' rotates to
 * match the tangent plus 180 degrees. */
 
@property(copy) NSString *rotationMode;
 
CA_EXTERN NSString * const kCAAnimationRotateAuto;
CA_EXTERN NSString * const kCAAnimationRotateAutoReverse;
 
@end

CATiledLayer

Следующий новый API был добавлен к CATiledLayer:

 
@interface CATiledLayer
 
/* The time in seconds that newly added images take to "fade-in" to the
 * rendered representation of the tiled layer. The default implementation
 * returns 0.25 seconds. */
 
+ (CFTimeInterval)fadeDuration;
 
@end

CALayer

Следующий новый API был добавлен к CALayer:

 
@interface CALayer
 
/* Returns a copy of the layer containing all properties as they were
 * at the start of the current transaction, with any active animations
 * applied. This gives a close approximation to the version of the layer
 * that is currently displayed.
 *
 * The effect of attempting to modify the returned layer in any way is
 * undefined.
 *
 * The `sublayers', `mask' and `superlayer' properties of the returned
 * layer return the presentation versions of these properties. This
 * carries through to read-only layer methods. E.g., calling -hitTest:
 * on the result of the -presentationLayer will query the presentation
 * values of the layer tree. */
 
- (id)presentationLayer;
 
/* When called on the result of the -presentationLayer method, returns
 * the underlying layer with the current model values. The result of
 * calling this method after the transaction that produced the
 * presentation layer has completed is undefined. */
 
- (id)modelLayer;
 
/* This initializer is used to create shadow copies of layers, e.g.
 * for the -presentationLayer method. Subclasses can optionally copy
 * their instance variables into the new object. Subclasses should
 * always invoke the superclass implementation; calling this method in
 * any other situations will produce undefined behavior. */
 
- (id)initWithLayer:(id)layer;
 
/* Returns the animation added to the layer with identifier 'key', or nil
 * if no such animation exists. Attempting to modify any properties of
 * the returned object will result in undefined behavior. */
 
- (CAAnimation *)animationForKey:(NSString *)key;
 
/* A rectangle in the unit coordinate space defining the subrectangle
 * of the `contents' property that will be drawn into the layer. If
 * pixels outside the unit rectangles are requested, the edge pixels of
 * the contents image will be extended outwards. If an empty rectangle
 * is provided, the results are undefined. Defaults to the unit
 * rectangle [0 0 1 1]. Animatable. */
 
@property CGRect contentsRect;
 
/* A bitmask defining how the edges of the layer are rasterized. For
 * each of the four edges (left, right, bottom, top) if the
 * corresponding bit is set the edge will be antialiased. Typically
 * this property is used to disable antialiasing for edges that abut
 * edges of other layers, to eliminate the seams that would otherwise
 * occur. The default value is for all edges to be antialiased. */
 
enum CAEdgeAntialiasingMask
{
  kCALayerLeftEdge    = 1U << 0,
  kCALayerRightEdge    = 1U << 1,
  kCALayerBottomEdge    = 1U << 2,
  kCALayerTopEdge    = 1U << 3,
};
 
@property unsigned int edgeAntialiasingMask;
 
/** Layer `contentsGravity' values. **/
 
/* Similar to kCAGravityResizeAspect except that it resizes the contents
 * of the layer to fill the bounds (while preserving its aspect ratio.) */
 
CA_EXTERN NSString * const kCAGravityResizeAspectFill;
 
@end

Семя в марте

Базовая анимация переименование API

В OS X выпуск 365 V10.5 и позже Базовая Анимация API подвергся значительному переименованию. Более ранний API будет сохраняться временно для совместимости; это будет удалено в будущем семени. Необходимо обновить проекты использовать новые имена API, прежде чем будет выпущен Leopard.

Таблица 1-1 детализирует отображение старого класса и имен протокола к новой схеме именования.

Таблица 1-1New Базовые имена классов Анимации

Исходное Имя Класса/Протокола

Новое Имя Класса/Протокола

LKAction

CAAction

LKAnimation

CAAnimation

LKAnimationGroup

CAAnimationGroup

LKBasicAnimation

CABasicAnimation

LKConstraint

CAConstraint

LKConstraintLayoutManager

CAConstraintLayoutManager

LKConstraintManager

CAConstraintManager

LKKeyframeAnimation

CAKeyframeAnimation

LKLayer

CALayer

LKLayoutManager

CALayoutManager

LKOpenGLLayer

CAOpenGLLayer

LKPropertyAnimation

CAPropertyAnimation

LKScrollLayer

CAScrollLayer

LKTextLayer

CATextLayer

LKTiledLayer

CATiledLayer

LKTiming

CAMediaTiming

LKTimingFunction

CAMediaTimingFunction

LKTransaction

CATransaction

LKTransition

CATransition

LKObject протокол был осужден. Представленные методы были теперь непосредственно добавлены к CAAnimation и CALayer классы. Расширения кодирования значения ключа, задокументированные в LKObject ссылка была временно добавлена к Базовому Руководству по программированию Анимации.

LKTransform stuct был переименован CATransform3D. Связанное LKTransform* функции были переименованы соответственно.

LKCurrentAbsoluteTime() функция была переименована CACurrentMediaTime().

Константы представили использование префикса kLK* были все переименованы kCA*.

Новые классы и свойства

Два новых класса были добавлены к Базовой Анимации: CATiledLayer и CARenderer. CATiledLayer класс позволяет Вам обеспечивать содержание инкрементно. CARenderer класс позволяет Вам представлять анимацию в Ядре контекст OpenGL непосредственно.

Несколько новых свойств были добавлены к CALayer класс. minification и magnification свойства позволяют Вам указывать фильтр для использования при масштабировании содержания уровня. anchorPoint свойство позволяет Вам указывать расположение в уровне, вокруг которого применяются преобразования.