iOS 细节大集合iOS开发-动画iOS Dev

CAAnimationGroup 动画组

2017-06-02  本文已影响52人  高手世界

实际开发中一个物体的运动往往是复合运动,单一属性的运动情况比较少,但恰恰属性动画每次进行动画设置时一次只能设置一个属性进行动画控制(不管是基础动画还是关键帧动画都是如此),这样一来要做一个复合运动的动画就必须创建多个属性动画进行组合。对于一两种动画的组合或许处理起来还比较容易,但是对于更多动画的组合控制往往会变得很麻烦,动画组的产生就是基于这样一种情况而产生的。动画组是一系列动画的组合,凡是添加到动画组中的动画都受控于动画组,这样一来各类动画公共的行为就可以统一进行控制而不必单独设置,而且放到动画组中的各个动画可以并发执行,共同构建出复杂的动画效果。

动画组使用起来并不复杂,首先单独创建单个动画(可以是基础动画也可以是关键帧动画),然后将基础动画添加到动画组,最后将动画组添加到图层即可。

下面这个实例是,先创建两个动画,最后再把他们添加到 动画组中,首先是 关键帧动画,让这个 layer 走一个矩形, 然后 是基础动画, 让他沿着对角线走,

CALayer *layerGroup = [[CALayer alloc] init];
layerGroup.bounds = CGRectMake(0, 0, 40, 40);
layerGroup.backgroundColor = [UIColor redColor].CGColor;
layerGroup.position = CGPointMake(5, 5);
[self.view.layer addSublayer:layerGroup];

CAKeyframeAnimation *keyAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
UIBezierPath *bezier = [UIBezierPath bezierPathWithRect:CGRectMake(10, 100, 300, 300)];
keyAnimation.path = bezier.CGPath;
keyAnimation.duration = 6.0;
keyAnimation.removedOnCompletion = NO;
keyAnimation.fillMode = kCAFillModeForwards;
keyAnimation.calculationMode = kCAAnimationCubic;

CABasicAnimation *basic = [[CABasicAnimation alloc] init];
basic.keyPath = @"transform";
basic.beginTime = 6;
basic.duration = 2;
basic.removedOnCompletion = NO;
basic.fillMode = kCAFillModeForwards;
basic.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeTranslation(300, 300, 1)];


CAAnimationGroup *group = [[CAAnimationGroup alloc] init];
group.duration = 8;
group.removedOnCompletion = NO;
group.fillMode = kCAFillModeForwards;
group.animations = @[keyAnimation,basic];
[layerGroup addAnimation:group forKey:nil];
组动画.gif

这就是利用组动画的效果,不过有一些地方需要注意:

上一篇下一篇

猜你喜欢

热点阅读