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

    细节

  • 相关阅读:
    集合容器
    洛谷P3953 逛公园
    洛谷P1967 货车运输
    洛谷P1073 最优贸易
    洛谷P4568 [JLOI2011]飞行路线
    洛谷P1265 公路修建
    洛谷P1503 鬼子进村
    洛谷P1613 跑路
    洛谷P4933 大师
    洛谷P4017 最大食物链计数
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/5161792.html
Copyright © 2011-2022 走看看