CoreAnimation 네임스페이스
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
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 |
애니메이션이 완료되면 개체의 동작을 제어하는 데 사용되는 CAAnimation 및 CALayer의 FillMode 속성에 사용되는 상수입니다. |
CAGradientLayer |
배경 위에 그라데이션을 렌더링하는 레이어입니다. |
CAGradientLayerTypeExtensions |
CoreAnimation 네임스페이스는 UIKit을 구동하는 기본 애니메이션 프레임워크에 대한 액세스를 제공합니다. |
CAKeyFrameAnimation |
키프레임 기반 애니메이션 지원. |
CALayer |
레이어는 화면에 렌더링되는 이미지를 저장합니다. |
CALayerDelegate |
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 |
3D 작성 계층. |
CATransition |
레이어에 대한 전환 애니메이션입니다. |
CAValueFunction |
애니메이션 중에 속성 값에 함수를 적용하는 데 사용되는 클래스입니다. |
구조체
CATransform3D |
3D 변환. |
인터페이스
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 UI의 핵심입니다. 이 네임스페이스의 API를 사용하면 UIKit을 구동하는 기본 애니메이션 프레임워크에 액세스할 수 있습니다.
UIKit 컨트롤은 하드웨어 가속 렌더링을 제공하기 위해 OpenGL 및 CoreGraphics와 직접 인터페이스하는 CoreAnimation을 기반으로 구현됩니다.
각각 UIView 은 속성을 통해 액세스되는 에 Layer 의해 CALayer 뒷받침됩니다. M:UIKit.UIView.Draw(System.Drawing.RectangleF) 메서드를 재정의하여 그리는 경우 CoreAnimation 계층으로 그리는 것입니다.
UIView가 다른 UIView를 포함할 수 있는 것처럼 CALayers는 다른 CALayer 인스턴스를 포함할 수 있습니다. , (CoreAnimation.CALayer,int)InsertSublayerBelow(CALayer, CALayer)를 호출AddSublayer(CALayer)하여 계층에 자식 계층을 삽입할 수 있습니다. 또는 M:CoreAnimation.CALayer.RemoveFromSuperLayer()를 사용하여 계층을 제거합니다. InsertSublayerAbove(CALayer, CALayer) 또한 운영 체제에서 제공하는 다양한 종류의 CALayers가 있으며 , CATextLayerCATiledLayerCAGradientLayerCAEAGLLayerCAScrollLayerCAReplicatorLayerCAShapeLayerCATransformLayer및 CAEmitterLayer시스템 제공 계층 CALayer중 하나를 서브클래싱하여 직접 만들 수 있습니다.
레이어는 사용자가 그리는 콘텐츠를 유지합니다. 다른 도구 키트와 달리 지역 노출 이벤트에 응답하기 위해 다시 그리는 메서드를 구현할 필요는 없습니다. 레이어의 콘텐츠를 업데이트하려면 재정의할 수 있는 메서드에 대한 호출을 트리거하는 M:CoreAnimation.CALayer.SetNeedsDisplay() 메서드를 DrawInContext(CGContext) 호출해야 합니다.
계층의 속성을 서브클래스의 인스턴스를 가리키도록 설정 Delegate 하여 레이어 렌더링을 CALayerDelegate 사용자 지정할 수 있습니다.
속성을 설정하여 레이어에 3D 변환을 적용할 수 있으며 속성을 설정 TransformSublayerTransform 하여 하위 계층에 적용된 3D 변환을 제어할 수도 있습니다. SublayerTransform을 사용하는 경우 속성을 사용하여 ZPosition Z축 위치를 지정할 수도 있습니다. 이는 원근 렌더링을 수행하는 데 유용합니다.
계층은 CoreAnimation이 작업을 효율적으로 수행하는 데 필요한 하드웨어 가속 구성 요소를 제공합니다. 이 기능 위에 CoreAnimation은 레이어에 애니메이션 효과를 주는 API 집합을 제공합니다.
iOS 4 이전에는 애니메이션이 트랜잭션으로 지정되었습니다. 애플리케이션 개발자는 및 M:UIKit.UIView.CommitAnimations에 대한 호출 간에 애니메이션 사양을 대괄호로 묶습니다. 애니메이션 이벤트(예: 애니메이션이 완료된 후 연속)에 반응하려면 대리자 개체 및 사용자 지정 선택기를 사용해야 합니다. 이 기술은 여전히 사용할 수 있지만 Apple은 최신 앱에서 "블록 기반" 애니메이션을 사용하는 것이 좋습니다. C# 용어에서 이러한 애니메이션을 "대리자 기반" 애니메이션이라고 합니다. 여기서 대리자(또는 익명 함수)는 형식입니다. 또한 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을 만드는 애플리케이션 개발자는 암시적 애니메이션 및 명시적 애니메이션과 같은 하위 수준 애니메이션 기술에 액세스할 수 있습니다.
N.B.: 레이어 애니메이션은 애니메이션 블록을 제외하고 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;
}
더 많은 제어를 원하는 애플리케이션 개발자는 명시적 애니메이션을 사용할 수 있습니다. 이렇게 하려면 애니메이션 클래스 , , CABasicAnimationCATransitionCAAnimationGroup또는 CAKeyFrameAnimation중 하나의 인스턴스를 CAPropertyAnimation만듭니다. 애니메이션은 메서드를 호출하여 레이어에 연결됩니다 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");
레이어 기반 애니메이션은 애니메이션 블록 내에서 UIView 제외하면 에 의해 UIView비활성화됩니다. 이러한 블록 내의 레이어 기반 애니메이션은 블록의 기간을 무시하고 지정된 기간(암시적 기본값 0.25초 또는 명시적 길이)에서 작동합니다. 애니메이션 블록의 기간이 1.0이지만 실제로는 레이어 기반 암시적 불투명도 애니메이션이 0.25초로 끝나고 위치 다시 지정이 10초 동안 실행되는 다음 예제 UIView 에 나와 있습니다.
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");
});