iOS - 果冻效果
具体使用的CADisplayLink和贝塞尔曲线
下载地址:https://github.com/nLoser/CustomAnimation
效果:
// // DisplayView.m // CustomAnimation // // Created by LV on 16/1/6. // Copyright © 2016年 Wieye. All rights reserved. // #import "DisplayView.h" @interface DisplayView () @property (nonatomic, strong) CADisplayLink * displayLink; @property (nonatomic, assign) CGFloat to; @property (nonatomic, assign) CGFloat from; @end @implementation DisplayView - (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { NSLog(@"Init"); self.backgroundColor = [UIColor clearColor]; } return self; } - (void)drawRect:(CGRect)rect { NSLog(@"DrawRect"); [[UIColor purpleColor] setFill]; CALayer *layer = self.layer.presentationLayer; CGFloat progress = - (layer.position.y - self.to) / (self.from - self.to); CGFloat height = CGRectGetHeight(rect); CGFloat deltaHeight = height / * (0.5 - fabs(progress - 0.5)); CGPoint topLeft = CGPointMake(, deltaHeight); CGPoint topRight = CGPointMake(CGRectGetWidth(rect), deltaHeight); CGPoint bottomLeft = CGPointMake(, height); CGPoint bottomRight = CGPointMake(CGRectGetWidth(rect), height); UIBezierPath* path = [UIBezierPath bezierPath]; [path moveToPoint:topLeft]; [path addQuadCurveToPoint:topRight controlPoint:CGPointMake(CGRectGetMidX(rect), )]; [path addLineToPoint:bottomRight]; [path addQuadCurveToPoint:bottomLeft controlPoint:CGPointMake(CGRectGetMidX(rect), height - deltaHeight)]; [path closePath]; [path fill]; } #pragma mark - Public Action - (void)startAnimationFrom:(CGFloat)from to:(CGFloat)to { if (self.displayLink == nil) { NSLog(@"StartAnimation"); self.from = from; self.to = to; self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(tick:)]; [self.displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; } [UIView animateWithDuration: delay: usingSpringWithDamping: options: animations:^{ self.center = CGPointMake(self.center.x, self.to); } completion:^(BOOL finished) { [self stopAnimation]; }]; } - (void)stopAnimation { if (self.displayLink != nil) { [self.displayLink invalidate]; self.displayLink = nil; } } #pragma mark - Private Action - (void)tick:(CADisplayLink *)displayLink { [self setNeedsDisplay]; } @end
#import <UIKit/UIKit.h> @interface DisplayView : UIView - (void)startAnimationFrom:(CGFloat)from to:(CGFloat)to; - (void)stopAnimation; @end
iOS - 果冻效果的更多相关文章
- iOS - 用 UIBezierPath 实现果冻效果
最近在网上看到一个很酷的下拉刷新效果(http://iostuts.io/2015/10/17/elastic-bounce-using-uibezierpath-and-pan-gesture/). ...
- iOS开发——图形编程OC篇&粘性动画以及果冻效果
粘性动画以及果冻效果 在最近做个一个自定义PageControl——KYAnimatedPageControl中,我实现了CALayer的形变动画以及CALayer的弹性动画,效果先过目: 先做个提纲 ...
- 谈谈iOS中粘性动画以及果冻效果的实现
在最近做个一个自定义PageControl——KYAnimatedPageControl中,我实现了CALayer的形变动画以及CALayer的弹性动画,效果先过目: https://github.c ...
- 转:谈谈iOS中粘性动画以及果冻效果的实现
在最近做个一个自定义PageControl——KYAnimatedPageControl中,我实现了CALayer的形变动画以及CALayer的弹性动画,效果先过目: 先做个提纲: 第一个分享的主题是 ...
- CADisplayLink+弹簧动画实现果冻效果
项目中在Tabbar中间的按钮要从底部弹出视图并有果冻效果,在CocoaChina中找了一篇博客用 UIBezierPath 实现果冻效果,github,自己就按着上面的demo修改了一下( 之前也是 ...
- 【转】提示框第三方库之MBProgressHUD iOS toast效果 动态提示框效果
原文网址:http://www.zhimengzhe.com/IOSkaifa/37910.html MBProgressHUD是一个开源项目,实现了很多种样式的提示框,使用上简单.方便,并且可以对显 ...
- Android仿IOS回弹效果 ScrollView回弹 总结
Android仿IOS回弹效果 ScrollView回弹 总结 应项目中的需求 须要仿IOS 下拉回弹的效果 , 我在网上搜了非常多 大多数都是拿scrollview 改吧改吧 试了一些 发现总 ...
- Android 实现高仿iOS桌面效果之可拖动的GridView(上)
转载请标明出处:http://blog.csdn.net/sk719887916/article/details/40074663,作者:skay 最近项目中遇到一个LIstview的拖动效 ...
- iOS 波浪效果的实现
iOS 波浪效果的实现 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #4f8187; background-c ...
随机推荐
- Qt环境搭建(Qt Creator)+Visual Studio
1.http://www.cnblogs.com/ranjiewen/p/5318768.html 简述 经常有人问我编写Qt程序时使用什么IDE,其实这个真的很难回答(各有所长),只能说看个人爱好了 ...
- C#异步编程二
上一异步编程的博客还是在9月份的,最近事情也比较多,烦恼事情一个接着一个,一个人的周末除了无聊就剩无聊了,也只有写写博客来打发下这无聊的时光.原本想着尽快把异步编程这块总结一下,之前把委托异步算是总结 ...
- How to remove a batch of VMs and related Disks
Foreword Need to remove a batch of VMs, which named with same prefix or belong to same Cloud Service ...
- matlab如何建立一个空矩阵,然后往里面赋值
x=:; y=[]; :length(x) % y=[y;x(i)];%把每一个x都放到Y里,成为一列 y=[y,x(i)];%把每一个x都放到Y里,成为一行 end
- XML是什么东西
记住,XML就是为数据传输而设计的一种标记语言,也是特么的一种标记语言,在这点上,和html是有点类似的,你看<xml>和<html>看上去难道不是很像嘛,而html是为数据显 ...
- 很简单的多线程访问python嘿嘿嘿
import urllib import socket from threading import * url = "http://www.baidu.com/s?ie=UTF-8& ...
- nginx location语法使用说明
语法规则: location [=|~|~*|^~] /uri/ { … } = 开头表示精确匹配 ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可.nginx不对url做编码,因 ...
- jqMobile中pageinit,pagecreate,pageshow等函数的执行顺序
常见的共有5个page函数,刚开始有点迷糊的是到底谁先谁后执行. 实验告诉我们结果: var temp = ''; $('body').live('pagechange', function () { ...
- 使用iframe标签结合springMvc做文件上传
1.iframe.jsp <body> <h1>测试iframe文件上传</h1> <!-- 1.要求表单的target属性名称与iframe的name名字一 ...
- 手把手windows64位配置安装python2.7
这几天公司要用到python的一些算法,让我调研一番,之前对Python一次没接触的我在安装配置环境的时候由于版本的问题,折腾了好久,这里简单介绍一下我的安装方法,需要安装pyhton的朋友可以不再向 ...