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");
});