-(void)removeAnima
{
NSArray *arr = [self.layer.sublayers copy];
for(CALayer*layerinarr) {
[layerremoveFromSuperlayer];
}
}
- (void)setAnimaType:(NSInteger)idx
{
[self removeAnima];
switch(idx) {
case0:// 无动画
break;
case1:
[selfanimaCross];
break;
case2:
[selfanimaWindow];
break;
case3:
[selfanimaFan];
break;
case4:
[selfanimaDissolve];
break;
case5:
[selfanimaRightIn];
break;
case6:
[selfanimaCircle];
break;
case7:
[selfanimaBoard];
break;
case8:
[selfanimaSplit];
break;
default:
break;
}
}
// 扇形展开动画
- (void)animaFan
{
CABasicAnimation *animation;
animation = [CABasicAnimationanimationWithKeyPath:@"strokeEnd"];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
animation.duration=2;
animation.fromValue= [NSNumbernumberWithFloat:1.0];
animation.toValue= [NSNumbernumberWithFloat:0.0];
animation.repeatCount=CGFLOAT_MAX;
CAShapeLayer *layer = [CAShapeLayer layer];
layer.lineWidth=100;
UIBezierPath *path = [UIBezierPath bezierPath];
path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(self.frame.size.width/2, self.frame.size.height/2) radius:50 startAngle:M_PI_2 endAngle:M_PI*3/2 clockwise:YES];
layer.path= path.CGPath;
layer.fillColor = [UIColor clearColor].CGColor;
layer.strokeColor = [UIColor whiteColor].CGColor;
[layeraddAnimation:animationforKey:@""];
[self.layeraddSublayer:layer];
CAShapeLayer *layer2 = [CAShapeLayer layer];
layer2.lineWidth=100;
UIBezierPath *path2 = [UIBezierPath bezierPath];
path2 = [UIBezierPath bezierPathWithArcCenter:CGPointMake(self.frame.size.width/2, self.frame.size.height/2) radius:50 startAngle:M_PI_2 endAngle:M_PI*3/2 clockwise:NO];
layer2.path= path2.CGPath;
layer2.fillColor = [UIColor clearColor].CGColor;
layer2.strokeColor = [UIColor whiteColor].CGColor;
[layer2addAnimation:animationforKey:@""];
[self.layeraddSublayer:layer2];
}
// 轮子展开动画
- (void)animaCircle
{
CABasicAnimation *animation;
animation = [CABasicAnimationanimationWithKeyPath:@"strokeEnd"];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
animation.duration=2;
animation.fromValue= [NSNumbernumberWithFloat:1.0];
animation.toValue= [NSNumbernumberWithFloat:0.0];
animation.repeatCount=CGFLOAT_MAX;
CAShapeLayer *layer = [CAShapeLayer layer];
layer.lineWidth=200;
UIBezierPath *path = [UIBezierPath bezierPath];
path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(self.frame.size.width/2, self.frame.size.height/2) radius:100 startAngle:M_PI*3/2 endAngle:-M_PI_2 clockwise:NO];
layer.path= path.CGPath;
layer.fillColor = [UIColor clearColor].CGColor;
layer.strokeColor = [UIColor whiteColor].CGColor;
[layeraddAnimation:animationforKey:@""];
[self.layeraddSublayer:layer];
}
// 百叶窗
- (void)animaWindow
{
CABasicAnimation *animation;
animation = [CABasicAnimationanimationWithKeyPath:@"strokeEnd"];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
animation.duration=2;
animation.fromValue= [NSNumbernumberWithFloat:1.0];
animation.toValue= [NSNumbernumberWithFloat:0.0];
animation.repeatCount=CGFLOAT_MAX;
CGFloat h = self.frame.size.height;
NSIntegercount =7;
for(inti =0; i < count; i++) {
CAShapeLayer *layer = [CAShapeLayer layer];
layer.lineWidth = self.frame.size.width;
UIBezierPath *path = [UIBezierPath bezierPath];
[pathmoveToPoint:CGPointMake(self.frame.size.width/2, h/count*i)];
[pathaddLineToPoint:CGPointMake(self.frame.size.width/2, h/count*(i+1))];
layer.path= path.CGPath;
layer.fillColor = [UIColor clearColor].CGColor;
layer.strokeColor = [UIColor whiteColor].CGColor;
[layeraddAnimation:animationforKey:@""];
[self.layeraddSublayer:layer];
}
}
// 劈裂效果
- (void)animaSplit
{
CABasicAnimation *animation;
animation = [CABasicAnimationanimationWithKeyPath:@"strokeEnd"];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
animation.duration=2;
animation.fromValue= [NSNumbernumberWithFloat:1.0];
animation.toValue= [NSNumbernumberWithFloat:0.0];
animation.repeatCount=CGFLOAT_MAX;
CAShapeLayer *layer = [CAShapeLayer layer];
layer.lineWidth = self.frame.size.height;
UIBezierPath *path = [UIBezierPath bezierPath];
[pathmoveToPoint:CGPointMake(self.frame.size.width/2, self.frame.size.height/2)];
[pathaddLineToPoint:CGPointMake(0, self.frame.size.height/2)];
layer.path= path.CGPath;
layer.fillColor = [UIColor clearColor].CGColor;
layer.strokeColor = [UIColor whiteColor].CGColor;
[layeraddAnimation:animationforKey:@""];
[self.layeraddSublayer:layer];
CAShapeLayer *layer2 = [CAShapeLayer layer];
layer2.lineWidth = self.frame.size.height;
UIBezierPath *path2 = [UIBezierPath bezierPath];
[path2moveToPoint:CGPointMake(self.frame.size.width/2, self.frame.size.height/2)];
[path2addLineToPoint:CGPointMake(self.frame.size.width, self.frame.size.height/2)];
layer2.path= path2.CGPath;
layer2.fillColor = [UIColor clearColor].CGColor;
layer2.strokeColor = [UIColor whiteColor].CGColor;
[layer2addAnimation:animationforKey:@""];
[self.layeraddSublayer:layer2];
}
// 十字扩展 效果
- (void)animaCross
{
CGFloat w = self.frame.size.width;
CGFloat h = self.frame.size.height;
CABasicAnimation *animation;
animation = [CABasicAnimationanimationWithKeyPath:@"bounds"];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
animation.duration=2;
animation.fromValue= [NSValuevalueWithCGRect:CGRectMake(0,h/4,w,h/2)];
animation.toValue= [NSValuevalueWithCGRect:CGRectMake(w/2,h/2,w,0)];
animation.repeatCount=CGFLOAT_MAX;
CAShapeLayer *layer = [CAShapeLayer layer];
layer.frame=CGRectMake(0,h/4,w,h/2);
layer.backgroundColor = [UIColor whiteColor].CGColor;
[layeraddAnimation:animationforKey:@""];
[self.layeraddSublayer:layer];
CABasicAnimation*animation2;
animation2 = [CABasicAnimationanimationWithKeyPath:@"bounds"];
animation2.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
animation2.duration=2;
animation2.fromValue= [NSValuevalueWithCGRect:CGRectMake(w/4,0,w/2,h)];
animation2.toValue= [NSValuevalueWithCGRect:CGRectMake(w/2,h/2,0,h)];
animation2.repeatCount=CGFLOAT_MAX;
CAShapeLayer *layer2 = [CAShapeLayer layer];
layer2.frame=CGRectMake(w/4,0,w/2,h);
layer2.backgroundColor = [UIColor whiteColor].CGColor;
[layer2addAnimation:animation2forKey:@""];
[self.layeraddSublayer:layer2];
}
// 右边切入 效果
- (void)animaRightIn
{
CGFloat w = self.frame.size.width;
CGFloat h = self.frame.size.height;
CABasicAnimation *animation;
animation = [CABasicAnimationanimationWithKeyPath:@"position"];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
animation.duration=2;
animation.fromValue= [NSValuevalueWithCGRect:CGRectMake(w*3/2,h/2,w,h)];
animation.toValue= [NSValuevalueWithCGRect:CGRectMake(w/2,h/2,w,h)];
animation.repeatCount=CGFLOAT_MAX;
CAShapeLayer *layerBack = [CAShapeLayer layer];
layerBack.frame=CGRectMake(0,0,w,h);
layerBack.backgroundColor = [UIColor whiteColor].CGColor;
[self.layeraddSublayer:layerBack];
CAShapeLayer *layer = [CAShapeLayer layer];
layer.backgroundColor = [UIColor redColor].CGColor;
layer.contents = (__bridge id)[UIImage imageNamed:@"anim_back"].CGImage;
layer.contentsGravity = kCAGravityResizeAspectFill;
layer.frame=CGRectMake(0,0,w,h);
[layeraddAnimation:animationforKey:@""];
[self.layeraddSublayer:layer];
}
// 棋盘动画 效果
- (void)animaBoard
{
CGFloat w = self.frame.size.width;
CGFloat h = self.frame.size.height;
CAKeyframeAnimation *animation;
animation = [CAKeyframeAnimationanimationWithKeyPath:@"strokeEnd"];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
animation.duration=2;
animation.repeatCount=CGFLOAT_MAX;
animation.values=@[@(1.0),@(1.0),@(0)];
animation.keyTimes = @[@(0.0),@(0.5),@(1.0)]; // 数组递增 [0-1]
CAKeyframeAnimation *animation1;
animation1 = [CAKeyframeAnimationanimationWithKeyPath:@"strokeEnd"];
animation1.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
animation1.duration=2;
animation1.values=@[@(1.0),@(0),@(0)];
animation1.keyTimes=@[@(0.0),@(0.5),@(1.0)];// 数组递增 [0-1]
animation1.repeatCount=CGFLOAT_MAX;
CGFloatpointw = w/10;
CGFloatpointh = h/10;
for(inti =0; i <10; i++)
{
for(intj =0; j <=10; j++)
{
CGFloatpointX = pointw*i;
if(j%2!=0) {
pointX -= pointw/2;
}
CGFloatpointY = pointh * j;
CAShapeLayer*layer = [CAShapeLayerlayer];
layer.lineWidth= pointh;
UIBezierPath*path = [UIBezierPathbezierPath];
[pathmoveToPoint:CGPointMake(pointX+pointw, pointY)];
[pathaddLineToPoint:CGPointMake(pointX, pointY)];
layer.path= path.CGPath;
layer.fillColor= [UIColorclearColor].CGColor;
layer.strokeColor= [UIColorwhiteColor].CGColor;
[layeraddAnimation:animationforKey:@""];
// layer.opacity = 0;
if(j%2!=0) {
[layeraddAnimation:animation1forKey:@""];
layer.opacity=1;
}
[self.layeraddSublayer:layer];
}
}
}
// 溶解 效果
- (void)animaDissolve
{
CGFloat w = self.frame.size.width;
CGFloat h = self.frame.size.height;
CGFloatpointw = w/20;
CGFloatpointh = h/20;
for(inti =0; i <=20; i++)
{
for(intj =0; j <=20; j++)
{
CGFloatpointX = pointw*i;
if(j%2!=0) {
pointX -= pointw/2;
}
CGFloatpointY = pointh * j;
CAShapeLayer*layer = [CAShapeLayerlayer];
layer.lineWidth= pointh;
UIBezierPath*path = [UIBezierPathbezierPath];
[pathmoveToPoint:CGPointMake(pointX+pointw, pointY)];
[pathaddLineToPoint:CGPointMake(pointX, pointY)];
layer.path= path.CGPath;
layer.fillColor= [UIColorclearColor].CGColor;
layer.strokeColor= [UIColorwhiteColor].CGColor;
CAKeyframeAnimation*animation = [selfkeyAnimaWithIndex:random()%19rate:0.05];
[layeraddAnimation:animationforKey:@""];
[self.layeraddSublayer:layer];
}
}
}
#pragma mark -- 帧动画:闪灭
- (CAKeyframeAnimation*)keyAnimaWithIndex:(NSInteger)idx rate:(CGFloat)rate
{
CAKeyframeAnimation *animation;
animation = [CAKeyframeAnimationanimationWithKeyPath:@"opacity"];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
animation.duration=2;
animation.values = @[@(1.0),@(1.0),@(0),@(0)];
animation.keyTimes=@[@(0.0),@(rate*idx),@(rate*idx+rate/10),@(1.0)];// 数组递增 [0-1]
animation.repeatCount=CGFLOAT_MAX;
animation.removedOnCompletion = NO;
returnanimation;
}
网友评论