핵심 애니메이션(Core Animation)
QuartzCore.framework
와 대응하는 프레임워크 도입
CALayer에서 애니메이션의 일시 중지 및 복원
OC 구문
#pragma mark CALayer
-(void)pauseLayer:(CALayer*)layer
{
CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
// CALayer
layer.speed = 0.0;
// CALayer pausedTime
layer.timeOffset = pausedTime;
}
#pragma mark CALayer
-(void)resumeLayer:(CALayer*)layer
{
CFTimeInterval pausedTime = layer.timeOffset;
// 1. CALayer
layer.speed = 1.0;
// 2.
layer.timeOffset = 0.0;
// 3.
layer.beginTime = 0.0;
// 4. ( CACurrentMediaTime()-pausedTime)
CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
// 5. ( timeSincePause)
layer.beginTime = timeSincePause;
}
문법
import UIKit
extension CALayer {
func pauseAnimation() {
let pauseTime = convertTime(CACurrentMediaTime(), fromLayer: nil)
speed = 0.0
timeOffset = pauseTime
}
func resumeAnimation() {
// 1.
let pauseTime = timeOffset
// 2.
speed = 1.0
timeOffset = 0.0
beginTime = 0.0
// 3.
let startTime = convertTime(CACurrentMediaTime(), fromLayer: nil) - pauseTime
beginTime = startTime
}
}
CAKeyframeAnimation의 간단한 사용
CAPropertyAnimation
의 하위 클래스이다. CABasicAnimation
와는 달리 CABasicAnimation
는 한 수치(fromValue
에서 다른 수치toValue
로만 바꿀 수 있고 CAKeyframeAnimation
는 한 NSArray를 사용하여 이 수치를 저장values
: 위의 NSArray 객체입니다.안의 요소를 키프레임이라고 합니다.애니메이션 대상은 지정한 시간 (duration) 내에values 그룹의 키 프레임 path
: 도면층이 경로 경로에 따라 이동하도록 CGPathRef, CGMutablePathRef를 설정할 수 있습니다.path는 CALayer의anchorPoint
와 position
에만 작용한다.path
가 설정되어 있으면 values
는 무시됩니다keyTimes
: 대응하는 관건 프레임에 대응하는 시간점을 지정할 수 있다. 그 수치 범위는 0에서 1.0이고 키Times의 모든 시간값은values의 모든 프레임에 대응한다.keyTimes를 설정하지 않으면 각 키 프레임의 시간은 균등하게 나뉜다CABasicAnimation
는 2개의 키프레임만 있는 CAKeyframeAnimation예제 코드
- (NSArray *)fishArray {
if (_fishArray == nil) {
//
NSMutableArray *tempArray = [NSMutableArray array];
for (int i= 0; i < 10; i++) {
NSString *name = [NSString stringWithFormat:@"fish%d",i];
UIImage *image = [UIImage imageNamed:name];
[tempArray addObject:image];
}
_fishArray = tempArray;
}
return _fishArray;
}
- (void)viewDidLoad {
[super viewDidLoad];
//
self.view.layer.contents = (id)[UIImage imageNamed:@"bg"].CGImage;
// layer
CALayer *fishL = [CALayer layer];
fishL.frame = CGRectMake(100, 288, 89, 40);
fishL.contents = (id)[UIImage imageNamed:@"fish0"].CGImage;
[self.view.layer addSublayer:fishL];
self.fishL = fishL;
[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(change) userInfo:nil repeats:YES];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
//
CAKeyframeAnimation *anim = [CAKeyframeAnimation animation];
anim.keyPath = @"position";
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(100, 288)];
[path addLineToPoint:CGPointMake(100, 100)];
[path addQuadCurveToPoint:CGPointMake(300, 400) controlPoint:CGPointMake(300, 20)];
[path addLineToPoint:CGPointMake(100, 288)];
//
anim.path = path.CGPath;
//
// anim.rotationMode = @"autoReverse";
anim.rotationMode = kCAAnimationRotateAutoReverse;
//
anim.calculationMode = @"cubicPaced";
anim.repeatCount = HUGE;
anim.duration = 5;
//
[self.fishL addAnimation:anim forKey:@"fish"];
}
static int _fishIndex = 0;
- (void)change {
_fishIndex++;
if (_fishIndex == 10) {
_fishIndex = 0;
}
UIImage *image = self.fishArray[_fishIndex];
self.fishL.contents = (id)image.CGImage;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.