iOS 의 CoreAnimation 개발 프레임 워 크 의 Layer 층 애니메이션 제작 분석
CAAnimation 은 CoreAnimation 프레임 워 크 에서 애니메이션 대상 을 수행 하 는 기본 적 인 유형 입 니 다.아래 에 그림 이 있 는데 제 가 손 으로 그린 것 이기 때문에 아름 답지 않 지만 CAAnimation 과 관련 된 몇 개의 애니메이션 유형의 관 계 를 명확 하 게 표현 할 수 있 습 니 다.
위의 그림 에서 보 듯 이 CAAnimation 에서 속성 애니메이션 을 만 드 는 CAProperty Animation,필드 전환 애니메이션 을 만 드 는 CATransition 과 그룹 애니메이션 을 만 드 는 CAAnimation Group 등 세 가지 키 종 류 를 이 어 받 았 다.
우 리 는 먼저 뿌리 부터 토론 합 시다.
1.CAAnimation 속성 과 방법
CAAnimation 은 애니메이션 대상 의 기본 클래스 로 애니메이션 의 기본 속성 을 봉 인 했 습 니 다.다음 과 같 습 니 다.
// CAAnimation
+ (instancetype)animation;
//
@property(nullable, strong) CAMediaTimingFunction *timingFunction;
//
@property(nullable, strong) id delegate;
//
@property(getter=isRemovedOnCompletion) BOOL removedOnCompletion;
timingFunction ,CAMediaTimingFunction :
4/*
name ,
//
NSString * const kCAMediaTimingFunctionLinear;
//
NSString * const kCAMediaTimingFunctionEaseIn;
//
NSString * const kCAMediaTimingFunctionEaseOut;
//
NSString * const kCAMediaTimingFunctionEaseInEaseOut;
//
NSString * const kCAMediaTimingFunctionDefault;
*/
+ (instancetype)functionWithName:(NSString *)name;
CAAnimation 의 대리 방법 은 다음 과 같다.2.CAProperty Animation 속성 과 방법
CAProperty Animation 은 CAAnimation 에서 속성 과 관련 된 애니메이션 을 만 드 는 데 사용 되 는 클래스 입 니 다.
//
- (void)animationDidStart:(CAAnimation *)anim;
//
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;
위의 이러한 속성 중 하나만 주의해 야 합 니 다.value Function 은 transform 애니메이션 을 위해 설 정 된 것 입 니 다.왜냐하면 우 리 는 transform3D 의 속성 을 직접 바 꿀 수 없 기 때 문 입 니 다.이 매개 변 수 를 통 해 transfrom 3D 속성 변 화 를 직접 조작 하여 애니메이션 효 과 를 낼 수 있 습 니 다.예 를 들 어 다음 과 같 습 니 다.Z 축 을 돌 며 회전 하 는 애니메이션:// path
// , @"backgroundColor" layer ,
+ (instancetype)animationWithKeyPath:(nullable NSString *)path;
//
// NO, ,
// YES,
@property(getter=isAdditive) BOOL additive;
//
// NO,
// yes,
@property(getter=isCumulative) BOOL cumulative;
// transfron
@property(nullable, strong) CAValueFunction *valueFunction;
실제로 점 을 사용 하 는 방식 도 해당 속성 에 접근 할 수 있 습 니 다.value Function 을 설정 하지 않 으 면 다음 과 같은 방법 으로 Z 축 을 돌 릴 수 있 습 니 다. // z
CABasicAnimation * ani = [CABasicAnimation animationWithKeyPath:@"transform"];
// 0
ani.fromValue = @0;
// 180
ani.toValue = [NSNumber numberWithFloat:M_PI];
// 2S
ani.duration = 2;
// z
ani.valueFunction = [CAValueFunction functionWithName:kCAValueFunctionRotateZ];
//
[layer addAnimation:ani forKey:@""];
3.CABasic 애니메이션 속성CABasic Animation 은 CAProperty Animation 에서 분 리 된 키 클래스 로 기본 적 인 속성 변화 애니메이션 을 만 듭 니 다.예 를 들 어 우리 위의 예제 코드,그 중에서 속성 은 다음 과 같 습 니 다.
4.567914.위의 세 가지 속성 은 모두 애니메이션 의 시작 과 끝 위 치 를 확인 하 는 것 으로 다음 과 같은 의 미 를 가진다.
(1)from Value 와 toValue 가 비어 있 지 않 습 니 다.애니메이션 의 값 은 from Value 에서 toValue 로 변 합 니 다.
(2)from Value 와 by Value 가 비어 있 지 않 습 니 다.애니메이션 의 값 은 from Value 에서 from Value+by Value 로 변 합 니 다.
(3)by Value 와 toValue 가 비어 있 지 않 습 니 다.애니메이션 의 값 은 toValue-by Value 에서 toValue 로 변 합 니 다.
(4)from Value 만 비어 있 지 않 습 니 다.애니메이션 의 값 은 from Value 에서 layer 의 현재 상태 값 으로 변 합 니 다.
(5)toValue 만 비어 있 지 않 습 니 다.애니메이션 의 값 은 layer 의 현재 값 에서 toValue 로 변 합 니 다.
(6)by Value 만 비어 있 지 않 습 니 다.애니메이션 의 값 은 layer 의 현재 값 에서 layer 의 현재 값+by Value 로 변 합 니 다.
4.CAKeyframe 애니메이션 키 프레임 애니메이션
CAKeyframeAnimation 도 CAProperty Animation 과 계승 하 는 하위 클래스 이다.CABasic Animation 과 다른 점 은 layer 층 의 속성 을 바 꾸 는 애니메이션 이지 만 CABasic Animation 은 초기 와 끝 상태 만 설정 할 수 있 기 때문에 우 리 는 통제 할 수 없다.CAKeyframeAnimation 은 우리 로 하여 금 관건 적 인 프레임 을 설정 하고 전체 애니메이션 을 설정 하 는 과정 에서속성 방법 은 다음 과 같 습 니 다:
4.567914.예 는 다음 과 같다.
.5.CASpringAnimation 댐퍼 애니메이션
CASpringAnimation 을 통 해 개발 자 들 이 스프링 효과 가 있 는 애니메이션 을 쉽게 만 들 수 있 습 니 다.주요 속성 은 다음 과 같 습 니 다.
6.CATransition 전환 애니메이션
CATransition 과 CAProperty Animation 의 차이 점 은 layer 층 이 나타 날 때 속성 이 바 뀌 는 것 이 아니 라 애니메이션 효과 가 발생 한 다 는 점 입 니 다.속성 은 다음 과 같 습 니 다.
4.567914.사실은 type 이 정의 한 애니메이션 효과 에 대해 공식 적 으로 정 의 를 내 렸 을 때 우 리 는 개인 적 인 매개 변 수 를 사용 할 수 있다.다음 과 같다.
(1)pageCurl 책장 을 넘기다
(2)rippleEffect 물방울 효과
(3)suckEffect 수축 효과,천 한 조각 이 뽑 히 는 것 과 같다.
(4)cube 입방체 효과
(5)oglFlip 상하 반전 효과
예 를 들 면:
7.CAAnimation Group 애니메이션 그룹
CAAnimation Group 자체 가 애니메이션 을 정의 하지 않 았 습 니 다.그 는 우리 가 위 에서 언급 한 관련 애니메이션 을 조합 할 수 있 습 니 다.
// z
CABasicAnimation * ani = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
// 0
ani.fromValue = @0;
// 180
ani.toValue = [NSNumber numberWithFloat:M_PI];
// 2S
ani.duration = 2;
//
[layer addAnimation:ani forKey:@""];
고급 애니메이션 기법@property(nullable, strong) id fromValue;
@property(nullable, strong) id toValue;
@property(nullable, strong) id byValue;
CoreAnimation 에는 또 하나의 중요 한 유형 이 있 습 니 다.CATransaction 사물 류 는 여러 layer 층 의 애니메이션 효 과 를 동시에 설정 할 수 있 습 니 다.암시 적 이 고 명시 적 인 두 가지 방식 으로 애니메이션 작업 을 할 수 있다.2.CATransaction 속성
layer 층 의 속성 조작 은 모두 암시 적 애니메이션 을 형성 합 니 다.암시 적 애니메이션 을 사용 하려 면 layer 층 의 animation 애니메이션 속성 을 닫 고 다음 방법 을 사용 해 야 합 니 다.
// ,
@property(nullable, copy) NSArray *values;
// , values
@property(nullable) CGPathRef path;
// 0-1,
@property(nullable, copy) NSArray<NSNumber *> *keyTimes;
//
@property(nullable, copy) NSArray<CAMediaTimingFunction *> *timingFunctions;
/*
NSString * const kCAAnimationLinear;
NSString * const kCAAnimationDiscrete;
NSString * const kCAAnimationPaced;
NSString * const kCAAnimationCubic;
NSString * const kCAAnimationCubicPaced;
*/
@property(copy) NSString *calculationMode;
CAKeyframeAnimation * ani = [CAKeyframeAnimation animationWithKeyPath:@"position"];
ani.values = @[[NSValue valueWithCGPoint:CGPointMake(100, 100)],[NSValue valueWithCGPoint:CGPointMake(120, 100)],[NSValue valueWithCGPoint:CGPointMake(120, 200)],[NSValue valueWithCGPoint:CGPointMake(200, 200)]];
ani.duration = 3;
[layer addAnimation:ani forKey:@""];
지원 하 는 key 값 은 다음 과 같 습 니 다.4
// 0 1
@property CGFloat mass;
// , 0 100
@property CGFloat stiffness;
// 10 0
@property CGFloat damping;
//
@property CGFloat initialVelocity;
//
@property(readonly) CFTimeInterval settlingDuration;
암시 적 인 전시 애니메이션 을 제외 하고 CATransaction 과 관련 된 방법 으로 보 여 주 는 제출 애니메이션 도 명시 적 으로 보 여 줍 니 다.4.567914.예 는 다음 과 같다.
/*
//
NSString * const kCATransitionFade;
//
NSString * const kCATransitionMoveIn;
//
NSString * const kCATransitionPush;
//
NSString * const kCATransitionReveal;
*/
@property(copy) NSString *type;
/*
//
NSString * const kCATransitionFromRight;
//
NSString * const kCATransitionFromLeft;
//
NSString * const kCATransitionFromTop;
//
NSString * const kCATransitionFromBottom;
*/
@property(nullable, copy) NSString *subtype;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
View의 레이아웃 방법을 AutoLayout에서 따뜻한 손 계산으로 하면 성능이 9.26배로 된 이야기이 기사는 의 15 일째 기사입니다. 어제는 에서 이었습니다. 손 계산을 권하는 의도는 없고, 특수한 상황하에서 계측한 내용입니다 화면 높이의 10 배 정도의 contentView가있는 UIScrollView 레이아...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.