Поделиться через


CoreAnimation Пространство имен

Пространство имен CoreAnimation предоставляет доступ к базовой платформе анимации, которая обеспечивает uiKit.

Классы

CAAction

Интерфейс, реализованный объектами, участвующими в анимациях, координируемых CALayer.

CAAnimation

Базовый класс для анимаций.

CAAnimationDelegate

Класс делегата для класса CAAnimation.

CAAnimationDelegate_Extensions

Методы расширения для CAAnimationDelegate класса .

CAAnimationGroup

Группирует и управляет несколькими анимациями.

CAAnimationStateEventArgs

Предоставляет данные для события E:CoreAnimation.CAAnimationStateEventArgs.AnimationStopped.

CABasicAnimation

Анимация на основе одного ключевого кадра.

CAConstraint

Пространство имен CoreAnimation предоставляет доступ к базовой платформе анимации, которая обеспечивает uiKit.

CAConstraintLayoutManager

Пространство имен CoreAnimation предоставляет доступ к базовой платформе анимации, которая обеспечивает uiKit.

CAContentsFormatExtensions

Пространство имен CoreAnimation предоставляет доступ к базовой платформе анимации, которая обеспечивает uiKit.

CADisplayLink

Объект синхронизации между анимацией и обновлением экрана.

CAEAGLLayer

Слой, используемый для отрисовки содержимого OpenGL.

CAEmitterBehavior

Определяет поведение излучателя системы частиц.

CAEmitterCell

Источник частиц, испускаемых экземпляром CAEmitterLayer .

CAEmitterLayer

Излучатель системы частиц. Типы частиц определяются с помощью CAEmitterCell.

CAFillMode

Константы, используемые для свойства FillMode в CAAnimation и CALayer, используемые для управления поведением объектов после завершения анимации.

CAGradientLayer

Слой, который отрисовывает градиент на его фоне.

CAGradientLayerTypeExtensions

Пространство имен CoreAnimation предоставляет доступ к базовой платформе анимации, которая обеспечивает uiKit.

CAKeyFrameAnimation

Поддержка анимации на основе ключевых кадров.

CALayer

Слои содержат изображения, которые отображаются на экране.

CALayerDelegate

Класс Delegate для CALayer.

CALayerDelegate_Extensions

Методы расширения интерфейса ICALayerDelegate для поддержки всех методов из CALayerDelegate протокола.

CAMediaTiming

Предоставляет иерархическую систему времени с поддержкой повторения и последовательности.

CAMediaTimingFunction

Определяет интервал анимации.

CAMetalLayer

Объект CALayer , отображаемый с помощью функций Metal.

CAOpenGLLayer

Пространство имен CoreAnimation предоставляет доступ к базовой платформе анимации, которая обеспечивает uiKit.

CAPropertyAnimation

Анимация, которая может анимировать свойства объекта.

CARenderer

Пространство имен CoreAnimation предоставляет доступ к базовой платформе анимации, которая обеспечивает uiKit.

CARendererOptions

Пространство имен CoreAnimation предоставляет доступ к базовой платформе анимации, которая обеспечивает uiKit.

CAReplicatorLayer

Слой, который реплицирует существующий слой с измененными атрибутами (цвет, преобразование).

CAScrollExtensions

Методы расширения для CAScroll.

CAScrollLayer

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

CAShapeLayer

Рисует кривую безье и составляет результат с первым подслоем.

CASpringAnimation

Весенняя анимация с жесткостью, массой и демпфированием.

CATextLayer

Простой текст и отрисовка обычного или атрибутивного текста.

CATextLayerAlignmentModeExtensions

Пространство имен CoreAnimation предоставляет доступ к базовой платформе анимации, которая обеспечивает uiKit.

CATextLayerTruncationModeExtensions

Пространство имен CoreAnimation предоставляет доступ к базовой платформе анимации, которая обеспечивает uiKit.

CATiledLayer

Слой, содержимое которого может предоставляться асинхронно и с несколькими уровнями детализации.

CATransaction

Платформа для синхронизации нескольких операций преобразования.

CATransformLayer

Трехмерный слой композитирования.

CATransition

Анимация перехода для слоя.

CAValueFunction

Класс, используемый для применения функций к значениям свойств во время анимации.

Структуры

CATransform3D

Трехмерные преобразования.

Интерфейсы

ICAAction

Интерфейс, представляющий обязательные методы (если таковые есть) протокола CAAction.

ICAAnimationDelegate

Делегат для реагирования на события жизненного цикла анимации.

ICALayerDelegate

Интерфейс, представляющий обязательные методы (если таковые есть) протокола CALayerDelegate.

ICAMediaTiming

Интерфейс, представляющий обязательные методы (если таковые есть) протокола CAMediaTiming.

ICAMetalDrawable

Интерфейс, определяющий протокол для буфера отображения на слое металла.

Перечисления

CAAutoresizingMask

Пространство имен CoreAnimation предоставляет доступ к базовой платформе анимации, которая обеспечивает uiKit.

CAConstraintAttribute

Пространство имен CoreAnimation предоставляет доступ к базовой платформе анимации, которая обеспечивает uiKit.

CAContentsFormat

Пространство имен CoreAnimation предоставляет доступ к базовой платформе анимации, которая обеспечивает uiKit.

CACornerMask

Пространство имен CoreAnimation предоставляет доступ к базовой платформе анимации, которая обеспечивает uiKit.

CAEdgeAntialiasingMask

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

CAGradientLayerType

Пространство имен CoreAnimation предоставляет доступ к базовой платформе анимации, которая обеспечивает uiKit.

CAScroll

Перечисляет направления прокрутки.

CATextLayerAlignmentMode

Пространство имен CoreAnimation предоставляет доступ к базовой платформе анимации, которая обеспечивает uiKit.

CATextLayerTruncationMode

Пространство имен CoreAnimation предоставляет доступ к базовой платформе анимации, которая обеспечивает uiKit.

Комментарии

CoreAnimation лежит в основе пользовательского интерфейса iPhone. API-интерфейсы в этом пространстве имен предоставляют доступ к базовой платформе анимации, которая обеспечивает uiKit.

Элементы управления UIKit реализуются поверх CoreAnimation, которая напрямую взаимодействует с OpenGL и CoreGraphics для обеспечения аппаратного ускорения отрисовки.

Каждый из них UIView поддерживается с помощью CALayer , доступ к которому осуществляется через Layer свойство . При рисовании путем переопределения метода M:UIKit.UIView.Draw(System.Drawing.RectangleF) выполняется рисование в слое CoreAnimation.

Так же, как UIView может содержать другие элементы UIView, CALayers может содержать другие экземпляры CALayer. Дочерние слои можно вставить в слой, вызвав AddSublayer(CALayer)M:CoreAnimation.CALayer.InsertSublayer(CoreAnimation.CALayer,int), InsertSublayerBelow(CALayer, CALayer)или InsertSublayerAbove(CALayer, CALayer) удалите слой с помощью M:CoreAnimation.CALayer.RemoveFromSuperLayer(). Кроме того, операционной системой предоставляются различные типы CALayers, и вы можете создать собственные, выполнив подклассы одного из предоставляемых системой уровней: CALayer, CATiledLayer, CATextLayer, CAScrollLayer, CAReplicatorLayerCAShapeLayer, CAGradientLayer, CATransformLayerи CAEAGLLayerCAEmitterLayer.

Слои будут сохранять содержимое, которое вы рисуете в них, в отличие от других наборов средств, нет необходимости реализовывать метод перекрашивать для реагирования на события, предоставляемые регионом. Чтобы обновить содержимое слоя, следует вызвать метод M:CoreAnimation.CALayer.SetNeedsDisplay(), который вызовет метод DrawInContext(CGContext) , который можно переопределить.

Вы можете настроить отрисовку слоя, задав Delegate свойство слоя так, чтобы он указывал на экземпляр подкласса CALayerDelegate .

Вы можете применить трехмерные преобразования к слоям, задав Transform свойство , а также управлять трехмерным преобразованием, применяемым к вложенным слоям SublayerTransform , задав свойство . Если вы используете SublayerTransform, вы также можете использовать ZPosition свойство , чтобы присвоить ему положение оси Z. Это полезно для отрисовки перспективы.

Уровни предоставляют компоненты аппаратного ускорения, необходимые для эффективной работы CoreAnimation. Вдобавок к этой функциональности CoreAnimation предоставляет набор API для анимации слоев.

До iOS 4 анимации указывались в виде транзакций: разработчики приложений связывали спецификации своих анимаций между вызовами M:UIKit.UIView.BeginAnimations* и M:UIKit.UIView.CommitAnimations*. Для реагирования на события анимации (например, продолжение после завершения анимации) требуется использование объекта делегата и пользовательских селекторов. Этот метод по-прежнему доступен, но Apple рекомендует использовать "блочные" анимации в современных приложениях. В терминологии C# эти анимации называются анимациями на основе делегатов, где делегат (или анонимная функция) имеет тип T:Foundation.NSAction. Кроме того, Xamarin.iOS предоставляет асинхронные оболочки для часто используемых функций анимации, чтобы разработчики приложений могли использовать средства C# 5+ async-await .

В следующем примере показаны различные методы:

//Transaction-based (recommended only for iOS < 4)
UIView.BeginAnimations("transactional");
UIView.SetAnimationDuration(2.0);
imgView.Layer.Position = newPosition;
UIView.SetAnimationDelegate (this);
UIView.SetAnimationDidStopSelector (new Selector ("positionAnimationFinished:"));
UIView.CommitAnimations();
//...etc...
[Export("positionAnimationFinished:")]
void SlideStopped ()
{
    Console.WriteLine("Animation finished; logic continues here");
}

На основе блоков

//Block-based, with animations in lambda, continuation as delegate (either technique works in either position)
UIView.Animate(2.0, () => imgView.Layer.Position = newPosition, SlideStopped);
//...etc...
void SlideStopped() { 
     Console.WriteLine("Animation finished; logic continues here");
}

Асинхронный

async void MyAnimateAsync {
    await UIView.AnimateAsync(2.0, () => imgView.Layer.Position = newPosition);
    Console.WriteLine("Animation finished; logic continues here");
}          

Эти методы, основанные на UIKit, должны соответствовать большинству вариантов использования анимации (кроме того, пакет Sprite kit предоставляет анимацию и физическое моделирование, подходящие для вариантов использования с высокой частотой кадров, таких как игры). Однако в дополнение к этим методам на основе UIKit разработчики приложений, создающие собственные CALayer, имеют доступ к методам анимации более низкого уровня: неявной анимации и явной анимации.

Н.Б.: Анимация слоев отключена в UIView, за исключением UIView блоков анимации. (См. обсуждение ниже.)

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

//
// The following method sets the opacity to zero on the image's Layer
// and will trigger a 0.25 animation to vanish the image by setting the
// opacity to zero
//
void HideImage (UIImageView image)
{
    view.Layer.Opacity = 0;
}

Разработчики приложений, которым требуется больше возможностей управления, могут использовать явную анимацию. Для этого они создают экземпляр одного из классов анимации , , или CAKeyFrameAnimationCABasicAnimationCAAnimationGroup. CATransitionCAPropertyAnimation Анимация присоединяется к слою путем вызова AddAnimation(CAAnimation, String) метода .

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

//
// Notice that we set the final position for the layer before we start
// animating from 0 to 120 since this is an explicit animation and we
// do not want to see the object "jump" back to 0, 0 at the end of
// the animation
//
layer.Position = new PointF (0, 120);
var positionAnimation = (CAKeyFrameAnimation) CAKeyFrameAnimation.FromKeyPath ("position.y");
positionAnimation.Values = new NSNumber [] { 0, 30, 60, 120 };
layer.AddAnimation (positionAnimation, "myAnimation");

Многоуровневые анимации отключены s, UIViewза исключением блоков UIView анимации. Анимации на основе слоев в таких блоках игнорируют длительность блоков и работают в пределах заданной длительности ( неявное значение по умолчанию — 0,25 секунды или явная длина). Это показано в следующем примере, в котором UIView длительность блока анимации составляет 1,0, но фактически анимация неявной непрозрачности на основе слоя заканчивается через 0,25 секунды, а повторное позиционирование выполняется в течение 10 секунд.

UIView.AnimateAsync(1.0, () => {
	imgView.Layer.Opacity = 0.0f;

	var theAnim = CABasicAnimation.FromKeyPath("position");
	theAnim.From = NSObject.FromObject(firstPosition);
	theAnim.To =  NSObject.FromObject(secondPosition);
	theAnim.Duration = 10.0;

	imgView.Layer.AddAnimation(theAnim, "AnimateFrame");
});