基础动画,话不多说,直接来看例子:
UIView *animatView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
animatView.backgroundColor = [UIColor redColor];
[self.view addSubview:animatView];
CABasicAnimation *basic = [[CABasicAnimation alloc] init];
basic.keyPath = @"position";
basic.repeatCount = MAXFLOAT;
basic.duration = 3;
basic.beginTime = CACurrentMediaTime() + 2;
basic.toValue = [NSValue valueWithCGPoint:CGPointMake(200, 600)];
basic.removedOnCompletion = NO;
basic.fillMode = kCAFillModeForwards;
[animatView.layer addAnimation:basic forKey:nil];
效果图如下:
下面我们来分析一下:
首先需要注意一点,所有这些属性的设置都必须在 给 layer 加入动画以前设置,
basic.keyPath 是指他的位置的变化
animationWithKeyPath的值:
transform.scale = 比例轉換
transform.scale.x = 闊的比例轉換
transform.scale.y = 高的比例轉換
transform.rotation.z = 平面圖的旋轉
opacity = 透明度
margin
zPosition
backgroundColor 背景颜色
cornerRadius 圆角
borderWidth
bounds
contents
contentsRect
cornerRadius
frame
hidden
mask
masksToBounds
opacity
position
shadowColor
shadowOffset
shadowOpacity
shadowRadius
basic.beginTime 是 动画多长时间开始执行,意思就是延迟多长时间(一定要注意我这这个时间的设置方法)
basic.repeatCount 重复次数
basic.duration 间隔
basic.removedOnCompletion 动画完成后是否移除,NO就是不移除
basic.fillMode 动画完成后的状态,要配合上一个属性使用
我们还注意到 CAAnimation 自己的特有的属性
fromValue, toValue, byValue
fromValue:初始状态,从这个状态开始
toValue : 结束状态, 到这个状态停止(完成一次动画)
byValue :每回增加多少,状态的增量
我们再来做一个例子:
UIView *animatView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
[self.view addSubview:animatView];
CABasicAnimation *basic = [[CABasicAnimation alloc] init];
basic.keyPath = @"contents";
basic.fromValue = (id)[UIImage imageNamed:@"01.jpeg"].CGImage;
basic.toValue = (id)[UIImage imageNamed:@"02.jpeg"].CGImage;
basic.duration = 2;
basic.removedOnCompletion = NO;
basic.fillMode = kCAFillModeForwards;
basic.repeatCount = MAXFLOAT;
[animatView.layer addAnimation:basic forKey:nil];
效果图:
这里的keyPath 是 "contents",注意因为是字符串一定不能拼错了