沿着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

细节

时间: 2024-11-16 19:04:48

沿着path路径做动画的相关文章

IOS 圆球沿着椭圆轨迹做动画_IOS

前言:最近公司项目有个需求,需要实现让一个view沿着椭圆轨迹做动画,效果实现后,就自己封装做了一个小demo,使用更方便.先看效果: 椭圆.gif 效果图中的白色椭圆轨迹线其实是用贝塞尔曲线画出来的,为了清晰的看出来运动的轨迹.其实项目中是不显示轨迹线的,也就是小球是悬空运动的.若不需要删除掉即可. 实现步骤: 1.首先设定关键帧动画CAKeyframeAnimation的一些属性,比如运动时间和重复次数和calculationMode模式,我们选择kCAAnimationPaced 使得动画

Android自定义View实现支付宝支付成功-极速get花式Path炫酷动画

本文手把手教你图片->SVG->Path的姿势.. 从此酷炫Path动画,如此简单. 效果先随便上几个图,以后你找到的图有多精彩,gif就有多精彩: 随便搜了一个铅笔画的图,丢进去 随手复制的二维码icon 来自大佬wing的铁塔 前文回顾 这里简单回顾一下前文,GIF如下图: PathAnimView接受的唯一数据源是Path(给我一个Path,还你一个动画View) 所以内置了几种将别的资源->Path的方法: 直接传string.(A-Z,0-9 "." &qu

如何修改Window系统下PATH路径

如何修改Window系统下PATH路径 //其实这个都是临时性的, 退出dos窗口就没有用了,只是做个笔记罢了 C:UsersAdministrator> set path=E:JBuilder2005jdk1.4bin;%path%

沿着贝塞尔曲线做动画

沿着贝塞尔曲线做动画 效果图如下: 源码: // // RootViewController.m // // Copyright (c) 2014年 Y.X. All rights reserved. // #import "RootViewController.h" #import "YXGCD.h" @interface RootViewController () @property (nonatomic, strong) GCDTimer *timer; @e

《Adobe After Effects CC 经典教程(彩色版)》——1.5 对合成图像做动画处理

1.5 对合成图像做动画处理 目前为止,你已经着手一个项目,创建了合成图像,导入了素材,并且应用了一些特效.一切显得很好.但如果再来点动画怎么样?到目前为止,你仅应用了静态特效. 在After Effects中,可以使用传统的关键帧.表达式或者关键帧助手来让图层的多个属性随时间的变化而改变.通过本书你将体验多种这类方法.这个练习将用关键帧使文字层的Position属性产生变化,然后采用动画预设,使屏幕上的文字在屏幕上看起来像雨一般落下. 1.5.1 准备文字合成图像 对于这个练习,你将处理一个单

android华为手机读取本地文件夹图片获取path路径null,求指导

问题描述 android华为手机读取本地文件夹图片获取path路径null,求指导 android华为手机读取本地文件夹图片获取path路径null,求指导 解决方案 public String getImagePathFromURI(Uri uri) { Cursor cursor = getActivity().getContentResolver().query(uri null null null null); String path = null; if (cursor != null

手把手教你用jQuery做动画插件

CSS样式属性动画 我们现在有很多的动画方法,滑动.淡出淡入.还有其他的显示隐藏动画,但是我们对于精确的控制动画以及动画到底怎么发生的还不太了解.我们这就来介绍一个非常强大的jQuery函数,animate,这个方法可以让你对任何的CSS属性做动画的效果.我们看看代码: $("p").animate({        padding:"20px",        fontSize:"30px"  },2000)  这段代码会动画操作所有的,将他们

用MASK做动画

用MASK做动画(三) 八.按F8键,在符号属性对话框中选择其类型为animation.点击OK按钮.在紧接着跳出来的动画窗口中再进行如下设置.Frames设为10帧.Move选项设为200(随便设置一个数字好啦).Scale to 选项中填入120.点击OK按钮表示确定. 九.看到红色小圆点没?呵呵,用鼠标选择它,并把它拖到黄色文字层的最右边. 十.最后一步啦,打开Layers面板,选择Layer1标签,双击.在跳出的对话框中把Share Across Frames前面的钩选上.使图层1进行共

Fireworks妙用投影做动画

大家先看看下图效果,文字做圆周运动的同时,本身的位置终始是正的,没有象别的圆周运动那样字发生了倾斜,而且字的颜色在发生渐变.不要误会只有FLASH中才能完成这效果,其实用Fireworks同样能完成,而且方法更简单.心痒了吧?跟我来! 1.新建一个文件,Width=300pixels,Height=300pixels,背景色为White白色. 2.在编辑区用文字工具输入文字"网络学院",字号为30pixels象素,字体颜色随意.取中该字,Commands>Document>