用path动画绘制水波纹

效果

源码

//
// ViewController.m
// PathAnimation
//
// Created by YouXianMing on 15/7/3.
// Copyright (c) 2015年 YouXianMing. All rights reserved.
// #import "ViewController.h" @interface ViewController () @property (nonatomic, strong) CAShapeLayer *animationLayer;
@property (nonatomic, strong) NSTimer *timer; @property (nonatomic) CGPathRef oldPath;
@property (nonatomic) CGPathRef path; @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; self.animationLayer = [CAShapeLayer layer];
self.animationLayer.borderWidth = 0.5f;
self.animationLayer.frame = CGRectMake(, , , );
self.animationLayer.position = self.view.center;
self.animationLayer.path = [self createPath].CGPath;
self.animationLayer.fillColor = [UIColor redColor].CGColor;
[self.view.layer addSublayer:self.animationLayer];
_timer = [NSTimer scheduledTimerWithTimeInterval:0.5f target:self selector:@selector(event) userInfo:nil repeats:YES];
} - (void)event { _oldPath = self.animationLayer.path;
_path = [self createPath].CGPath; CABasicAnimation *basicAnimation = [CABasicAnimation animationWithKeyPath:@"path"];
basicAnimation.duration = 0.5;
basicAnimation.fromValue = (__bridge id)(_oldPath);
basicAnimation.toValue = (__bridge id)_path;
self.animationLayer.path = _path; [self.animationLayer addAnimation:basicAnimation forKey:@"animateCirclePath"];
} - (UIBezierPath *)createPath { static int count = ; CGFloat controlPoint1_X = ;
CGFloat controlPoint1_Y = ;
CGFloat controlPoint2_X = ;
CGFloat controlPoint2_Y = ; if (count ++ % == ) { controlPoint1_X = [self randomNum_70_79];
controlPoint1_Y = [self randomNum_70_79]; controlPoint2_X = [self randomNum_120_129];
controlPoint2_Y = [self randomNum_120_129]; } else { controlPoint1_X = [self randomNum_70_79];
controlPoint1_Y = [self randomNum_120_129]; controlPoint2_X = [self randomNum_120_129];
controlPoint2_Y = [self randomNum_70_79]; } // 获取贝塞尔曲线
UIBezierPath* bezierPath = [UIBezierPath bezierPath]; // A
[bezierPath moveToPoint:CGPointMake(, )]; // B (Curve)
[bezierPath addCurveToPoint:CGPointMake(, )
controlPoint1:CGPointMake(controlPoint1_X, controlPoint1_Y)
controlPoint2:CGPointMake(controlPoint2_X, controlPoint2_Y)]; // C
[bezierPath addLineToPoint:CGPointMake(, )]; // D
[bezierPath addLineToPoint:CGPointMake(, )]; // 闭合曲线
[bezierPath closePath]; return bezierPath;
} /**
* 随机数 70 - 79
*
* @return 随机数
*/
- (CGFloat)randomNum_70_79 { return (CGFloat)(arc4random() % + );
} /**
* 随机数 120 - 129
*
* @return 随机数
*/
- (CGFloat)randomNum_120_129 { return (CGFloat)(arc4random() % + );
} @end

核心

用path动画绘制水波纹的更多相关文章

  1. Android自定义View——贝塞尔曲线实现水波纹效果

    我们使用到的是Path类的quadTo(x1, y1, x2, y2)方法,属于二阶贝塞尔曲线,使用一张图来展示二阶贝塞尔曲线,这里的(x1,y1)是控制点,(x2,y2)是终止点,起始点默认是Pat ...

  2. iOS 自定义任意形状加载进度条(水波纹进度条)

    1. 项目中要做类似下面的加载动画: 先给出安卓的实现方式 2.iOS的实现方式参考了下面两位的,感谢. 以任意底部图片为背景的加载动画 和 水波纹动画 最后附上自己的demo

  3. CSS3 水波纹

    css3 动画设置水波纹,效果如下图: 源码: <!DOCTYPE html> <html lang="en"> <head> <meta ...

  4. Android -- 贝塞尔实现水波纹动画(划重点!!)

    1,昨天看到了一个挺好的ui效果,是使用贝塞尔曲线实现的,就和大家来分享分享,还有,在写博客的时候我经常会把自己在做某种效果时的一些问题给写出来,而不是像很多文章直接就给出了解决方法,这里给大家解释一 ...

  5. HTML5 Canvas水波纹动画特效

    HTML5的Canvas特性非常实用,我们不仅可以在Canvas画布上绘制各种图形,也可以制作绚丽的动画,比如这次介绍的水波纹动画特效.以前我们也分享过一款基于HTML5 WebGL的水波荡漾动画,让 ...

  6. Android自定义控件-Path之贝赛尔曲线和手势轨迹、水波纹效果

    从这篇开始,我将延续androidGraphics系列文章把图片相关的知识给大家讲完,这一篇先稍微进阶一下,给大家把<android Graphics(二):路径及文字>略去的quadTo ...

  7. 用drawRect以及CAReplicatorLayer绘制动态水波纹

    用drawRect以及CAReplicatorLayer绘制动态水波纹 大大简化了写水波纹效果的难度,你可以根据示例自己组装水波纹效果,本设计是几个工具组合在一起完成的效果, DrawRectObje ...

  8. css 实现水波纹,波浪动画效果

    <div class="wave"> 水波纹效果 <div class="wave1"></div> <div cla ...

  9. 手把手教你画一个 逼格满满圆形水波纹loadingview Android

    才没有完结呢o( ̄︶ ̄)n .大家好,这里是番外篇. 拜读了爱哥的博客,又学到不少东西.爱哥曾经说过: 要站在巨人的丁丁上. 那么今天,我们就站在爱哥的丁丁上来学习制作一款自定义view(开个玩笑,爱 ...

随机推荐

  1. cookie和session的区别,session的生命周期,

    这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪 ...

  2. Java并发编程-核心问题(1)

    一.常见问题 从小的方面讲, 并发编程最常见的问题就是可见性.原子性和有序性问题. 从大的方面讲, 并发编程最常见的问题就是安全性问题.活跃性问题和性能问题. 下面主要从微观上分析问题. 二.可见性问 ...

  3. Mybatis中同时使用shardbatis和pagehelper插件冲突问题

    在一次使用mybatis的插件,分表shardbatis+分页pagehelper共同使用的时候,会抛出以下异常: java.lang.NoSuchMethodError: net.sf.jsqlpa ...

  4. 学习ThinkPHP笔记

    学习ThinkPHP笔记 TP的模块化设计 名称 描述 应用 基于同一个入口文件访问的项目我们称之为一个应用. 模块 一个应用下面可以包含多个模块,每个模块在应用目录下面都是一个独立的子目录. 控制器 ...

  5. sql 等额本息

    /* 等额本息计算还款额 a 贷款总额 b 月利率 m 贷款月数 */ execute block returns (result double precision) as declare a ; - ...

  6. rsyslog 配置 二

    转自:https://www.cnblogs.com/cherishry/p/6775163.html rsyslog 配置 二 # rsyslog configuration file # For ...

  7. BG.Hive - part2

    1. 将mysql的订单数据导入hive的分区表(桶.倾斜)[partition,bucket,skew] a> 在Hive中新建分区表 CREATE TABLE IF NOT EXISTS H ...

  8. 深入理解MyBatis的原理:整个体系

    前言:工作中虽然用到了 MyBatis,可完全不知道为什么,再不学习就晚了,这里将记录我的学习笔记,整个 MyBatis 的体系. 一.简介 1.传统的JDBC JDBC 是一种典型的桥接模式. 使用 ...

  9. 小tip: base64:URL背景图片与web页面性能优化——张鑫旭

    一.base64百科 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP环境下传递较长的标识信息. 某人: 唉,我彻底废柴了,为何上面明明是中文,洒家却看不懂嘞,为什 ...

  10. bzoj2111ZJ2010排列计数_solution

    -by bzoj http://www.lydsy.com/JudgeOnline/problem.php?id=2111 考虑第i个位置上的数字的可能性只取决于第i/2位置上的数,以及剩余数集的大小 ...