iOS 模仿支付寶支付成功動畫(swift+oc)

模仿支付寶支付成功的動畫,美工給了一張有對號的圖片資源,感覺顯示一張圖片用戶體驗(yàn)不好,看下最終的效果吧!


原理闡述

該動畫有兩部分組成,一部分是繪制圓環(huán),一部分是對勾。

一。繪制圓,

首先確定圓的起始位置和結(jié)束位置。根據(jù)數(shù)學(xué)坐標(biāo)系,設(shè)置起始位置為M_PI*3/2,結(jié)束位置為M_PI*7/2。可以開始畫圓了!!

二。繪制對勾。

首先確定對勾三個(gè)點(diǎn)的坐標(biāo)位置。


圖片有點(diǎn)丑莫見怪!能算對才是王道。該圖radius =88,確定三個(gè)點(diǎn)分別到x軸和到Y軸的距離。

第一個(gè)點(diǎn)坐標(biāo)(48,88),以半徑為單位,48/radius =0.45,88/radius = 1.0,

轉(zhuǎn)化后的坐標(biāo)(radius*0.45,

radius*1.0),同理其他轉(zhuǎn)化后坐標(biāo)為(radius*0.84,

radius*1.32),(radius*1.48,

radius*0.68)。

三個(gè)點(diǎn)的坐標(biāo)確定,就可以繪圖了!!

繪制動畫代碼(oc)

一.添加一個(gè)點(diǎn)擊事件


-(void)wouldToHome{

UIView*viewMark = [[UIView alloc]init];

viewMark.bounds=CGRectMake(0, 0, 50,

50);

viewMark.center=CGPointMake(self.view.center.x,80);

[selfshowAnimationIPay:viewMark];

[self.viewaddSubview:viewMark];

}

二.繪圖

#pragma mark -- animation

#define

LineWidthScale1.0//設(shè)置線寬度比例

-(void)showAnimationIPay:(UIView*)view{

CGSizesize = view.frame.size;

CGFloatradius=(size.height>size.width?size.width:size.height)/2.0;

CGFloatlineW= radius*LineWidthScale/10;

//畫圈

UIBezierPath*circlePath =[UIBezierPath

bezierPathWithArcCenter:CGPointMake(radius,radius)radius:radiusstartAngle:M_PI*3/2endAngle:M_PI*7/2clockwise:YES];

circlePath.lineCapStyle =

kCGLineCapRound;

circlePath.lineJoinStyle =

kCGLineCapRound;

//對勾

UIBezierPath*linePath = [UIBezierPath bezierPath];

[linePathmoveToPoint:CGPointMake(radius*0.45,radius*1.0)];

[linePathaddLineToPoint:CGPointMake(radius*0.84,radius*1.32)];

[linePathaddLineToPoint:CGPointMake(radius*1.48,radius*0.68)];

[circlePathappendPath:linePath];

CAShapeLayer*shapeLyer =[CAShapeLayer layer];

shapeLyer.path=circlePath.CGPath;

shapeLyer.strokeColor = [UIColor

colorWithRed:0/255.0green:194/255.0blue:79/255.0alpha:1.0].CGColor;

shapeLyer.fillColor= [[UIColor clearColor] CGColor];

shapeLyer.lineWidth=lineW;

shapeLyer.strokeStart= 0.0;

shapeLyer.strokeEnd= 0.0;

[view.layer

addSublayer:shapeLyer];

//動畫

CABasicAnimation*animation =[CABasicAnimation

animationWithKeyPath:@"strokeEnd"];

if(shapeLyer.strokeEnd== 1.0) {

[animationsetFromValue:@1.0];

[animationsetToValue:@0.0];

}else{

[animationsetFromValue:@0.0];

[animationsetToValue:@1.0];

}

[animationsetDuration:1.0];

animation.fillMode=kCAFillModeForwards;

animation.removedOnCompletion=NO;

//如果在動畫結(jié)束后需要做操作的話,設(shè)置動畫代理

animation.delegate=self;

[shapeLyeraddAnimation:animation

forKey:@"animationKey"];

}

#pragma mark ==

CAAnimationDelegate

//需要設(shè)置代理< CAAnimationDelegate

>

- (void)animationDidStop:(CAAnimation*)anim finished:(BOOL)flag{

//動畫結(jié)束后做的操作

}

以下是swift版

var aview: UIView!

aview = UIView()

aview.frame = CGRect(x:64, y:64, width:100, height: 100)

self.view.addSubview(aview)

aview.backgroundColor = UIColor.clear

let radius:CGFloat = aview.frame.size.width / 2.0

//畫一個(gè)圓

let bezier = UIBezierPath()

let point = aview.center

print(point)

bezier.addArc(withCenter: CGPoint(x:radius, y:radius), radius:radius, startAngle: CGFloat(0), endAngle: CGFloat(M_PI) * 2,clockwise: true)

bezier.lineCapStyle = .round

bezier.lineJoinStyle = .round

//畫一個(gè)對號

let linePath = UIBezierPath()

linePath.move(to: CGPoint(x:radius*0.45, y:radius*1.0))

linePath.addLine(to: CGPoint(x:radius*0.84, y:radius*1.32))

linePath.addLine(to: CGPoint(x:radius*1.48, y:radius*0.68))

bezier.append(linePath)

//創(chuàng)建一個(gè) layer

let layer = CAShapeLayer()

layer.path = bezier.cgPath

layer.fillColor = UIColor.clear.cgColor

layer.strokeColor = UIColor.green.cgColor

layer.lineWidth = 2.5

aview.layer.addSublayer(layer);

//創(chuàng)建一個(gè)動畫

let animation = CABasicAnimation()

animation.duration = 1.2;

animation.keyPath = "strokeEnd";

animation.fromValue = 0

animation.toValue = 1

//animation.repeatCount = MAXFLOAT

animation.fillMode = kCAFillModeForwards;

animation.isRemovedOnCompletion = false;

layer.add(animation, forKey: "strokeEnd")

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,578評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,701評論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,691評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,974評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,694評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,026評論 1 329
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,015評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,193評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,719評論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,442評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,668評論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,151評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,846評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,255評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,592評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,394評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內(nèi)容