• 关键帧动画-五角星动画-在层上画出五角星


    本例是对核心动画教程的  关键帧动画中的一个例子的一点总结与自己的心得

    在.h文件中 定义一个   CGMutablePathRef starPath; 用来纪录当前的路径 以便于绘画。

     

    .m文件

    - (IBAction)action:(id)sender {
        
        //创建五角星的路径
        CGMutablePathRef path = CGPathCreateMutable();
        CGPathMoveToPoint(path,NULL,240.0, 280.0);
        CGPathAddLineToPoint(path, NULL, 181.0, 99.0);
        CGPathAddLineToPoint(path, NULL, 335.0, 210.0);
        CGPathAddLineToPoint(path, NULL, 144.0, 210.0);
        CGPathAddLineToPoint(path, NULL, 298.0, 99.0);
        CGPathCloseSubpath(path);
    
        //创建关键帧动画实例
        CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
        //关键帧动画定义为10秒,一共6帧,每一帧是10/(6-1)等与2秒
        [animation setDuration:10.0f];
        [animation setDelegate:self];
        [animation setPath:path];
    
    
         [self.block.layer addAnimation:animation forKey:NULL];
        
        //在每一帧结束的时候  定时器进入其方法
        [NSTimer scheduledTimerWithTimeInterval:2.0 target:self
                                       selector:@selector(legOne:) userInfo:nil
                                        repeats:NO];
        [NSTimer scheduledTimerWithTimeInterval:4.0
                                         target:self selector:@selector(legTwo:) userInfo:nil
                                        repeats:NO];
        [NSTimer scheduledTimerWithTimeInterval:6.0 target:self
                                       selector:@selector(legThree:) userInfo:nil repeats:NO];
        
        [NSTimer scheduledTimerWithTimeInterval:8.0 target:self selector:@selector(legFour:) userInfo:nil
    repeats:NO];
        [NSTimer scheduledTimerWithTimeInterval:10.0 target:self selector:@selector(legFive:) userInfo:nil
                                        repeats:NO];
        // Tell the root layer to call drawLayer
    
        //不设定这个Delegate  调用setNeedDisplay的时候  会不进入 drawLayer方法
        [self.view.layer setDelegate:self];
        
        
        
    }
    

     注意最后一行代码的作用

    - (void)legOne:(id)sender {
        CGPathAddLineToPoint(starPath, NULL, 181.0, 99.0);
        [self.view.layer setNeedsDisplay];
    }
    - (void)legTwo:(id)sender { CGPathAddLineToPoint(starPath, NULL, 335.0, 210.0);
        [self.view.layer setNeedsDisplay];
    }
    - (void)legThree:(id)sender { CGPathAddLineToPoint(starPath, NULL, 144.0, 210.0);
        [self.view.layer setNeedsDisplay];
    }
    - (void)legFour:(id)sender { CGPathAddLineToPoint(starPath, NULL, 298.0, 99.0);
        [self.view.layer setNeedsDisplay];
    }
    - (void)legFive:(id)sender { CGPathCloseSubpath(starPath);
        [self.view.layer setNeedsDisplay];
    }
    
    - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)context {
       
        CGColorRef white =[UIColor whiteColor].CGColor;
            CGContextSetStrokeColorWithColor(context, white);
        //CFRelease(white);
        CGContextBeginPath(context);
        CGContextAddPath(context, starPath);
        CGContextSetLineWidth(context, 3.0);
        CGContextStrokePath(context);
        NSLog(@"im in drawLayer");
    }
    

     另外 注意  在.h文件中定义的 starPath 要初始化  在ViewDidLoad中完成的

        starPath=CGPathCreateMutable();
        CGPathMoveToPoint(starPath,NULL,240.0, 280.0);
    
  • 相关阅读:
    Beta 冲刺(1/7)
    福大软工 · BETA 版冲刺前准备(团队)
    福大软工 · 第十一次作业
    Alpha 冲刺 (8/10)
    Alpha 冲刺 (7/10)
    Alpha 冲刺 (6/10)
    个人作业——软件工程实践总结作业
    Beta 答辩总结
    Beta 冲刺 (7/7)
    Beta 冲刺 (6/7)
  • 原文地址:https://www.cnblogs.com/bucengyongyou/p/2842113.html
Copyright © 2020-2023  润新知