zoukankan      html  css  js  c++  java
  • 沿着path路径做动画

    沿着path路径做动画

    路径

    效果

    源码

    //
    //  ViewController.m
    //  PathAnimation
    //
    //  Created by YouXianMing on 16/1/26.
    //  Copyright © 2016年 YouXianMing. All rights reserved.
    //
    
    #import "ViewController.h"
    
    @interface ViewController ()
    
    @property (nonatomic) CGPoint startPoint;
    @property (nonatomic) CGPoint endPoint;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        
        [super viewDidLoad];
        
        // 起始点 结束点
        self.startPoint = CGPointMake(0, 150);
        self.endPoint   = CGPointMake(160, 150);
    
        // 初始化view
        UIButton *redButton       = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 10, 10)];
        redButton.center          = self.startPoint;
        redButton.backgroundColor = [UIColor redColor];
        [redButton addTarget:self action:@selector(buttonEvent) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:redButton];
        
        // CAKeyframeAnimation
        CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
        animation.path                 = [self path].CGPath;
        animation.duration             = 2.f;
        animation.timingFunction       = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
        
        redButton.center               = self.endPoint;
        [redButton.layer addAnimation:animation forKey:nil];
    }
    
    - (UIBezierPath *)path {
    
        UIBezierPath* bezierPath = [UIBezierPath bezierPath];
        
        [bezierPath moveToPoint:    self.startPoint];
        [bezierPath addLineToPoint: CGPointMake(68, 150)];
        [bezierPath addLineToPoint: CGPointMake(83, 107)];
        [bezierPath addLineToPoint: CGPointMake(96, 206)];
        [bezierPath addLineToPoint: CGPointMake(102, 150)];
        [bezierPath addLineToPoint: CGPointMake(116, 150)];
        [bezierPath addLineToPoint: CGPointMake(127, 82)];
        [bezierPath addLineToPoint: CGPointMake(143, 213)];
        [bezierPath addLineToPoint: self.endPoint];
    
        return bezierPath;
    }
    
    - (void)buttonEvent {
        
        // todo
    }
    
    @end

    细节

    效果

    源码

    //
    //  ViewController.m
    //  PathAnimation
    //
    //  Created by YouXianMing on 16/1/26.
    //  Copyright © 2016年 YouXianMing. All rights reserved.
    //
    
    #import "ViewController.h"
    
    @interface ViewController ()
    
    @property (nonatomic) CGPoint startPoint;
    @property (nonatomic) CGPoint endPoint;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        
        [super viewDidLoad];
        
        // 起始点 结束点
        self.startPoint = CGPointMake(0, 150);
        self.endPoint   = CGPointMake(160, 150);
    
        // 初始化view
        UIButton *redButton       = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 10, 10)];
        redButton.center          = self.startPoint;
        redButton.backgroundColor = [UIColor redColor];
        [redButton addTarget:self action:@selector(buttonEvent) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:redButton];
        
        // CAKeyframeAnimation
        CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
        animation.path                 = [self path].CGPath;
        animation.duration             = 2.f;
        animation.autoreverses         = true;
        animation.repeatCount          = CGFLOAT_MAX;
        animation.timingFunction       = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
        
        [redButton.layer addAnimation:animation forKey:nil];
    }
    
    - (UIBezierPath *)path {
    
        UIBezierPath* bezierPath = [UIBezierPath bezierPath];
        
        [bezierPath moveToPoint:    self.startPoint];
        [bezierPath addLineToPoint: CGPointMake(68, 150)];
        [bezierPath addLineToPoint: CGPointMake(83, 107)];
        [bezierPath addLineToPoint: CGPointMake(96, 206)];
        [bezierPath addLineToPoint: CGPointMake(102, 150)];
        [bezierPath addLineToPoint: CGPointMake(116, 150)];
        [bezierPath addLineToPoint: CGPointMake(127, 82)];
        [bezierPath addLineToPoint: CGPointMake(143, 213)];
        [bezierPath addLineToPoint: self.endPoint];
    
        return bezierPath;
    }
    
    - (void)buttonEvent {
        
        // todo
    }
    
    @end

    细节

  • 相关阅读:
    数据库性能优化一:数据库自身优化(大数据量)
    Delphi中initialization和finalization
    Delphi中的消息处理
    布施持戒忍辱精进禅定般若——净空法师【转】
    如何清除sql server日志
    工作反省
    软件设计入门2 数据库设计
    软件设计入门1 架构设计
    invokeRequired属性和 invoke()方法
    delphi 生成验证码
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/5161792.html
Copyright © 2011-2022 走看看