亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS動畫解析之支付寶支付打鉤動畫的實現方法

2020-07-26 02:38:16
字體:
來源:轉載
供稿:網友

前言

我們平時在用支付寶付款時,會有一個支付中的動畫和一個支付完成的動畫。這篇博客主要分析一下這種動畫效果,效果如下:

支付寶支付動畫

一、動畫解析

為了方便觀察,放慢了動畫的速度并添加輔助線:

放慢后的動畫

從圖中可以看出:加載圓弧運動軌跡可分為前半段和后半段;并且圓弧的起始角度(StartAngle)和結束角度(EndAngle)在做有規律的變化;

前半段: 從-0.5π到π,這一段運動中速度較快;StartAngle不變,始終未-0.5π;EndAngle在勻速上升,一直到π;前半段中圓弧不斷變長,最后形成一個3/4的圓。

后半段: 從π到1.5π,這一段運動速度較慢;StartAngle開始變化,從-0.5π變化到1.5π;EndAngle從π變化到1.5π,最后StartAngle和EndAngle重合于1.5π;后半段中圓弧不斷變長,最后直至消失。

二、實現代碼

1、初始化一些全局屬性

{ //刷新工具 CADisplayLink *_link; //顯示圓環 CAShapeLayer *_animationLayer; //起始角度 CGFloat _startAngle; //結束角度 CGFloat _endAngle; //當前動畫進度 CGFloat _progress;}

2、界面刷新工作由CADisplayLink來完成

 _link = [CADisplayLink displayLinkWithTarget:self selector:@selector(displayLinkAction)]; [_link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode]; _link.paused = true;

為了實現前半段和后半段的速度區別,定義了一個速度方法:

-(CGFloat)speed{ if (_endAngle > M_PI) {  return 0.1/60.0f; } return 0.8/60.0f;}

通過CADisplayLink刷新進度,進度增長的快慢有speed決定:

-(void)displayLinkAction{ _progress += [self speed]; if (_progress >= 1) {  _progress = 0; } [self updateAnimationLayer];}

刷新貝塞爾曲線的StartAngle和EndAngle實現曲線的運動:

-(void)updateAnimationLayer{ _startAngle = -M_PI_2; _endAngle = -M_PI_2 +_progress * M_PI * 2; if (_endAngle > M_PI) {  CGFloat progress1 = 1 - (1 - _progress)/0.25;  _startAngle = -M_PI_2 + progress1 * M_PI * 2; } CGFloat radius = _animationLayer.bounds.size.width/2.0f - lineWidth/2.0f; CGFloat centerX = _animationLayer.bounds.size.width/2.0f; CGFloat centerY = _animationLayer.bounds.size.height/2.0f; UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(centerX, centerY) radius:radius startAngle:_startAngle endAngle:_endAngle clockwise:true]; path.lineCapStyle = kCGLineCapRound; _animationLayer.path = path.CGPath;}

支付完成動畫解析

為了方便觀察,放慢了動畫的速度,并添加輔助線:

原理分析

通過上圖可知,支付完成的動畫由兩部分組成:圓環動畫 + 對號動畫

三、代碼實現

1、圓環動畫

這個動畫比較簡單,是利用貝塞爾曲線畫弧的功能。再利用CAShapeLayer的strokeEnd屬性加上核心動畫實現的圓環動畫。

-(void)circleAnimation{ //顯示圖層 CAShapeLayer *circleLayer = [CAShapeLayer layer]; circleLayer.frame = _animationLayer.bounds; [_animationLayer addSublayer:circleLayer]; circleLayer.fillColor = [[UIColor clearColor] CGColor]; circleLayer.strokeColor = BlueColor.CGColor; circleLayer.lineWidth = lineWidth; circleLayer.lineCap = kCALineCapRound; //運動路徑 CGFloat lineWidth = 5.0f; CGFloat radius = _animationLayer.bounds.size.width/2.0f - lineWidth/2.0f; UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:circleLayer.position radius:radius startAngle:-M_PI/2 endAngle:M_PI*3/2 clockwise:true]; circleLayer.path = path.CGPath; //執行動畫 CABasicAnimation *checkAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"]; checkAnimation.duration = circleDuriation; checkAnimation.fromValue = @(0.0f); checkAnimation.toValue = @(1.0f); checkAnimation.delegate = self; [checkAnimation setValue:@"checkAnimation" forKey:@"animationName"]; [circleLayer addAnimation:checkAnimation forKey:nil];}

2、對號動畫

對號動畫是利用了貝塞爾曲線的畫線特性,設置了兩段曲線拼接成了一個對號。如上圖所示對號由線段AB和線段BC拼接完成,然后再利用核心動畫和CAShapeLayer的strokeEnd屬性實現對號動畫。

-(void)checkAnimation{ //外切圓的邊長 CGFloat a = _animationLayer.bounds.size.width; //設置三個點 A、B、C UIBezierPath *path = [UIBezierPath bezierPath]; [path moveToPoint:CGPointMake(a*2.7/10,a*5.4/10)]; [path addLineToPoint:CGPointMake(a*4.5/10,a*7/10)]; [path addLineToPoint:CGPointMake(a*7.8/10,a*3.8/10)]; //顯示圖層 CAShapeLayer *checkLayer = [CAShapeLayer layer]; checkLayer.path = path.CGPath; checkLayer.fillColor = [UIColor clearColor].CGColor; checkLayer.strokeColor = BlueColor.CGColor; checkLayer.lineWidth = lineWidth; checkLayer.lineCap = kCALineCapRound; checkLayer.lineJoin = kCALineJoinRound; [_animationLayer addSublayer:checkLayer]; //執行動畫 CABasicAnimation *checkAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"]; checkAnimation.duration = checkDuration; checkAnimation.fromValue = @(0.0f); checkAnimation.toValue = @(1.0f); checkAnimation.delegate = self; [checkAnimation setValue:@"checkAnimation" forKey:@"animationName"]; [checkLayer addAnimation:checkAnimation forKey:nil];}

源碼下載:

Github地址

本地下載

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91高清在线免费观看| 国产成人鲁鲁免费视频a| 中文字幕在线看视频国产欧美在线看完整| 国产精品91在线观看| 欧美成人午夜激情在线| 成人国产精品av| 欧美成人一二三| 欧美亚洲视频在线观看| 国产精品96久久久久久又黄又硬| 91精品免费久久久久久久久| 欧美性xxxx极品hd欧美风情| 国产亚洲激情视频在线| 日本免费久久高清视频| 奇米影视亚洲狠狠色| 欧美黑人狂野猛交老妇| 国外成人性视频| 色偷偷888欧美精品久久久| 国内外成人免费激情在线视频| 日本免费一区二区三区视频观看| 日韩性xxxx爱| 91视频8mav| 青草成人免费视频| 粉嫩av一区二区三区免费野| 国产精品久久视频| 国产亚洲视频在线| 国产91精品网站| 欧美小视频在线观看| 日韩视频在线免费| 亚洲成年网站在线观看| 成人免费视频97| 国内伊人久久久久久网站视频| 成人国产精品免费视频| 成人激情电影一区二区| 久久97久久97精品免视看| 成人a免费视频| 欧美肥婆姓交大片| 精品久久久久久久久久ntr影视| 久久国产天堂福利天堂| 欧美午夜丰满在线18影院| 亚洲日本欧美中文幕| 国产精品国产自产拍高清av水多| 亚洲女在线观看| 搡老女人一区二区三区视频tv| 欧美成在线观看| 精品久久久久久电影| 国产精品中文字幕在线观看| 色妞久久福利网| 69国产精品成人在线播放| 97在线看免费观看视频在线观看| 国产精品美乳一区二区免费| 欧美激情国内偷拍| 欧美在线一区二区视频| 日韩中文字在线| 欧美精品日韩三级| 精品成人国产在线观看男人呻吟| 国产精品免费久久久久影院| 亚洲第一二三四五区| 久久成人精品电影| 久久精品视频网站| 欧美日韩一区二区在线| 一区二区三区 在线观看视| 国产精品免费观看在线| 国产亚洲一区精品| 亚洲第一av网站| 亚洲大胆人体在线| 国产精品www网站| 成人网在线观看| 日韩欧美有码在线| 精品久久久久久中文字幕一区奶水| 欧美伦理91i| 国产精品极品尤物在线观看| 欧美超级免费视 在线| 日韩一区二区精品视频| 91精品国产色综合久久不卡98| 国产精品9999| 国产精品第1页| 成人黄色av免费在线观看| 久久久久久久久久亚洲| 亚洲欧美日韩天堂| 成人精品一区二区三区| 亚洲午夜小视频| 日本久久中文字幕| 国产精品第10页| 久久精品99久久香蕉国产色戒| 欧美成人午夜免费视在线看片| 成人欧美一区二区三区黑人孕妇| 97久久超碰福利国产精品…| 国产精品一区专区欧美日韩| 色噜噜亚洲精品中文字幕| 91高潮精品免费porn| 91午夜理伦私人影院| 国产va免费精品高清在线观看| 久久av中文字幕| 久久免费精品日本久久中文字幕| yellow中文字幕久久| 日韩欧美亚洲综合| 国内免费精品永久在线视频| 日韩在线播放av| 国产成人精品一区二区三区| 欧美激情影音先锋| 性色av一区二区咪爱| 国产精品久久久久久久久久尿| 日本久久久久久久| 欧美成人合集magnet| 国产99久久精品一区二区永久免费| 国产精品视频大全| 91久久精品国产91久久性色| 欧美大尺度激情区在线播放| 日韩美女写真福利在线观看| 国产91成人video| 欧美国产一区二区三区| 精品久久国产精品| 日韩av理论片| 成人xxxxx| 欧美性xxxxxxx| 日韩av在线免费看| 欧美激情精品久久久久久久变态| xxxxx成人.com| 亚洲欧美日韩高清| 国产精品高潮呻吟久久av无限| 久久av中文字幕| 久久视频在线直播| 国产精品99久久久久久人| 午夜精品一区二区三区视频免费看| 亚洲码在线观看| 色777狠狠综合秋免鲁丝| 成人久久久久久久| 91在线视频免费| 久久影视免费观看| 国产欧美日韩中文| 主播福利视频一区| 亚洲最大av在线| 久久91亚洲精品中文字幕奶水| 日韩电影免费在线观看中文字幕| 日韩中文字幕视频在线观看| 不卡伊人av在线播放| 97精品欧美一区二区三区| 色综合久久88色综合天天看泰| 国产精品综合不卡av| 欧美亚洲另类在线| 国产成人精品久久二区二区91| 成人日韩av在线| 精品久久久久久久久久久久久| 成人动漫网站在线观看| 国模精品视频一区二区| 精品国产一区二区三区久久狼黑人| 91精品国产综合久久男男| 色噜噜狠狠狠综合曰曰曰88av| 992tv成人免费视频| 日本91av在线播放| 日韩在线中文字幕| 91精品成人久久| 欧美理论电影在线观看| 精品一区二区三区三区| 日韩在线视频网站| 亚洲精品视频网上网址在线观看| 久久久亚洲精品视频| 亚洲а∨天堂久久精品9966| 久久99久久亚洲国产| 欧美成人激情视频免费观看| 欧美大片在线影院| 一区二区三区在线播放欧美| 色无极影院亚洲| 久久97久久97精品免视看|