iOS中利用UIBezierPath + CAAnimation實(shí)現(xiàn)心跳動(dòng)畫效果
前言
最近在開(kāi)發(fā)ios項(xiàng)目空閑之余,決定練習(xí)下UIBezierPath進(jìn)行繪圖和CAAnimation動(dòng)畫的使用,制作了一個(gè)心跳的動(dòng)畫,很簡(jiǎn)單的示例,下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹:
GIF示例:
核心代碼
1-首先通過(guò) drawRect 繪制心形view
- (void)drawRect:(CGRect)rect { // 間距 CGFloat padding = 4.0; // 半徑(小圓半徑) CGFloat curveRadius = (rect.size.width - 2 * padding)/4.0; // 貝塞爾曲線 UIBezierPath *heartPath = [UIBezierPath bezierPath]; // 起點(diǎn)(圓的第一個(gè)點(diǎn)) CGPoint tipLocation = CGPointMake(rect.size.width/2, rect.size.height-padding); // 從起點(diǎn)開(kāi)始畫 [heartPath moveToPoint:tipLocation]; // (左圓的第二個(gè)點(diǎn)) CGPoint topLeftCurveStart = CGPointMake(padding, rect.size.height/2.4); // 添加二次曲線 [heartPath addQuadCurveToPoint:topLeftCurveStart controlPoint:CGPointMake(topLeftCurveStart.x, topLeftCurveStart.y + curveRadius)]; // 畫圓 [heartPath addArcWithCenter:CGPointMake(topLeftCurveStart.x+curveRadius, topLeftCurveStart.y) radius:curveRadius startAngle:M_PI endAngle:0 clockwise:YES]; // (左圓的第二個(gè)點(diǎn)) CGPoint topRightCurveStart = CGPointMake(topLeftCurveStart.x + 2*curveRadius, topLeftCurveStart.y); // 畫圓 [heartPath addArcWithCenter:CGPointMake(topRightCurveStart.x+curveRadius, topRightCurveStart.y) radius:curveRadius startAngle:M_PI endAngle:0 clockwise:YES]; // 右上角控制點(diǎn) CGPoint topRightCurveEnd = CGPointMake(topLeftCurveStart.x + 4*curveRadius, topRightCurveStart.y); // 添加二次曲線 [heartPath addQuadCurveToPoint:tipLocation controlPoint:CGPointMake(topRightCurveEnd.x, topRightCurveEnd.y+curveRadius)]; // 設(shè)置填充色 [[UIColor redColor] setFill]; // 填充 [heartPath fill]; // 設(shè)置邊線 heartPath.lineWidth = 2; heartPath.lineCapStyle = kCGLineCapRound; heartPath.lineJoinStyle = kCGLineJoinRound; // 設(shè)置描邊色 [[UIColor yellowColor] setStroke]; [heartPath stroke]; }
2-添加心形view到主視圖
XMHeartView *heartView = [[XMHeartView alloc] init]; heartView.frame = CGRectMake(100, 50, 200, 200); [self.view addSubview:heartView];
3-給心形view添加心跳動(dòng)畫
// 給心視圖添加心跳動(dòng)畫 float bigSize = 1.1; CABasicAnimation *pulseAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; pulseAnimation.duration = 0.5; pulseAnimation.toValue = [NSNumber numberWithFloat:bigSize]; pulseAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; // 倒轉(zhuǎn)動(dòng)畫 pulseAnimation.autoreverses = YES; // 設(shè)置重復(fù)次數(shù)為無(wú)限大 pulseAnimation.repeatCount = FLT_MAX; // 添加動(dòng)畫到layer [heartView.layer addAnimation:pulseAnimation forKey:@"transform.scale"];
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
詳解IOS串行隊(duì)列與并行隊(duì)列進(jìn)行同步或者異步的實(shí)例
這篇文章主要介紹了詳解IOS串行隊(duì)列與并行隊(duì)列進(jìn)行同步或者異步的實(shí)例的相關(guān)資料,IOS中GCD的隊(duì)列分為串行隊(duì)列和并行隊(duì)列,任務(wù)分為同步任務(wù)和異步任務(wù),他們的排列組合有四種情況這里就一一分析下,需要的朋友可以參考下2017-07-07iOS的客戶端菜單功能仿百度糯米/美團(tuán)二級(jí)菜單
我剛好最近在開(kāi)發(fā)一個(gè)商城項(xiàng)目,實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的控件,控件的效果就是類似百度糯米或者美團(tuán)的二級(jí)菜單,非常不錯(cuò)具有參考借鑒價(jià)值,對(duì)百度糯米 美團(tuán)二級(jí)菜單功能感興趣的朋友一起看看吧2016-11-11iOS實(shí)現(xiàn)自定義起始時(shí)間選擇器視圖
本篇文章主要介紹了iOS實(shí)現(xiàn)自定義起始時(shí)間選擇器視圖,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06淺談iOS關(guān)于頭文件的導(dǎo)入問(wèn)題
本篇文章主要介紹了淺談iOS關(guān)于頭文件的導(dǎo)入問(wèn)題,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-04-04淺談IOS中AFNetworking網(wǎng)絡(luò)請(qǐng)求的get和post步驟
本篇文章主要介紹了淺談IOS中AFNetworking網(wǎng)絡(luò)請(qǐng)求的get和post步驟的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-02-02iOS如何自定義控制器轉(zhuǎn)場(chǎng)動(dòng)畫push詳解
在平時(shí)開(kāi)發(fā)中,有時(shí)候需要一些轉(zhuǎn)場(chǎng)動(dòng)畫給界面調(diào)整增添一些活力,而實(shí)現(xiàn)這些動(dòng)畫相對(duì)比較繁瑣。下面這篇文章主要給大家介紹了關(guān)于iOS如何自定義控制器轉(zhuǎn)場(chǎng)動(dòng)畫push的相關(guān)資料,需要的朋友可以參考下。2017-12-12iOS開(kāi)發(fā)中使用NSURLConnection類處理網(wǎng)絡(luò)請(qǐng)求的方法
這篇文章主要介紹了iOS開(kāi)發(fā)中使用NSURLConnection類處理網(wǎng)絡(luò)請(qǐng)求的方法,代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下2015-12-12