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

    细节

  • 相关阅读:
    VMware16Pro永久激活key密钥亲测可用
    软件客户端激活码设计思路
    Android 监听外部U盘插入事件
    分享一款由python开发的全能多线程抢购神器,支持华为、京东、淘宝等商城
    android遇见Uninitialized object exists on backward branch 142解决办法
    android framework-下载Android系统源代码
    android-windowManager使用实例
    理解Android Framework
    4种常用线程池介绍
    谈一款MOBA类游戏《码神联盟》的服务端架构设计与实现 (转载)
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/5161792.html
Copyright © 2011-2022 走看看