這篇文章主要介紹了iOS中如何實(shí)現(xiàn)下拉刷新動(dòng)畫,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
10年積累的網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站策劃后付款的網(wǎng)站建設(shè)流程,更有平陰免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。先上完整的效果圖:
接下去動(dòng)畫分步實(shí)現(xiàn),首先先實(shí)現(xiàn)如下效果:
思路是這樣的,在偏移值小于等于100的時(shí)候繪制一個(gè)矩形,當(dāng)偏移值大于100的時(shí)候,底部直線變成曲線,主要是利用CAShapeLayer和UIBezierPath來實(shí)現(xiàn),代碼如下
#pragma mark - UIScrollViewDelegate -(void)scrollViewDidScroll:(UIScrollView *)scrollView { CGFloat height = -scrollView.contentOffset.y; UIBezierPath *path = [UIBezierPath bezierPath]; [path moveToPoint:CGPointMake(0, 0)]; [path addLineToPoint:CGPointMake(self.view.width, 0)]; if (height <= 100) { //偏移值小于等于100的時(shí)候,底部繪制直線 [path addLineToPoint:CGPointMake(self.view.width, height)]; [path addLineToPoint:CGPointMake(0, height)]; }else{ //偏移值大于100的時(shí)候,底部繪制曲線 [path addLineToPoint:CGPointMake(self.view.width, 100)]; [path addQuadCurveToPoint:CGPointMake(0, 100) controlPoint:CGPointMake(self.view.center.x, height)]; } [path closePath]; self.shapeLayer.path = path.CGPath; }
其次,實(shí)現(xiàn)繪制太陽,效果如下:
主要用到的是CAShapeLayer的path和strokeEnd屬性,首先繪制一個(gè)太陽,代碼如下:
#pragma mark - private method -(void)p_initCircle { self.circleLayer.frame = CGRectMake(0, 0, self.view.width, 100); self.circleLayer.fillColor = nil; self.circleLayer.strokeColor = [UIColor whiteColor].CGColor; self.circleLayer.lineWidth = 2.0; CGPoint center = CGPointMake(self.view.center.x, 50); UIBezierPath *path = [UIBezierPath bezierPath]; [path moveToPoint:CGPointMake(self.view.center.x, 35)]; [path addArcWithCenter:center radius:15 startAngle:-M_PI_2 endAngle:M_PI * 1.5 clockwise:YES]; CGFloat r1 = 17.0; CGFloat r2 = 22.0; for (int i = 0; i < 8 ; i++) { CGPoint pointStart = CGPointMake(center.x + sin((M_PI * 2.0 / 8 * i)) * r1, center.y - cos((M_PI * 2.0 / 8 * i)) * r1); CGPoint pointEnd = CGPointMake(center.x + sin((M_PI * 2.0 / 8 * i)) * r2, center.y - cos((M_PI * 2.0 / 8 * i)) * r2); [path moveToPoint:pointStart]; [path addLineToPoint:pointEnd]; } self.circleLayer.path = path.CGPath; }
其次在拖拽的過程中,利用strokeEnd屬性逐步顯示太陽,代碼如下:
#pragma mark - UIScrollViewDelegate -(void)scrollViewDidScroll:(UIScrollView *)scrollView { CGFloat height = -scrollView.contentOffset.y; if (height <= 100) { //偏移值小于等于100的時(shí)候,繪制對(duì)應(yīng)的路徑 self.circleLayer.strokeEnd = height / 100.0; }else{ //偏移值大于100的時(shí)候,繪制全路徑 self.circleLayer.strokeEnd = 1.0; } }
其次,讓繪制完的太陽隨著拽動(dòng)而旋轉(zhuǎn),效果圖如下:
主要思想是在繪制完畢之后,通過affineTransform屬性,讓太陽圖層旋轉(zhuǎn),代碼如下:
#pragma mark - UIScrollViewDelegate -(void)scrollViewDidScroll:(UIScrollView *)scrollView { CGFloat height = -scrollView.contentOffset.y; [CATransaction begin]; [CATransaction setDisableActions:YES]; if (height <= 100) { //偏移值小于等于100的時(shí)候,不旋轉(zhuǎn) self.circleLayer.affineTransform = CGAffineTransformIdentity; }else{ //偏移值小于等于100的時(shí)候,旋轉(zhuǎn) self.circleLayer.affineTransform = CGAffineTransformMakeRotation(-(M_PI / 720 * height - 100)); } [CATransaction commit]; }
其中要注意的地方是需要禁止隱式動(dòng)畫,不然每次修改affineTransform都會(huì)自動(dòng)帶上隱式動(dòng)畫效果。
最后就是釋放后,讓tableView滾動(dòng)到固定位置,然后讓太陽持續(xù)旋轉(zhuǎn),屏蔽tableView的拖拽事件,主要用到的是CABaseAnimation,代碼如下
-(void)p_rise { self.tableView.scrollEnabled = NO; CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; anim.duration = 0.15; anim.toValue = @(M_PI / 4.0); anim.repeatCount = MAXFLOAT; [self.circleLayer addAnimation:anim forKey:nil]; }
最后在經(jīng)過一定時(shí)間后,移除圖層動(dòng)畫,取消屏蔽tableView的拖拽事件,并且讓tableView滾動(dòng)到頂部,代碼如下:
-(void)p_stop { self.tableView.scrollEnabled = YES; [self.tableView setContentOffset:CGPointMake(0, 0) animated:YES]; [self.circleLayer removeAllAnimations]; }
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“iOS中如何實(shí)現(xiàn)下拉刷新動(dòng)畫”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián)建站,關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站muchs.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
分享名稱:iOS中如何實(shí)現(xiàn)下拉刷新動(dòng)畫-創(chuàng)新互聯(lián)
分享地址:http://muchs.cn/article34/dgcgse.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、服務(wù)器托管、營(yíng)銷型網(wǎng)站建設(shè)、軟件開發(fā)、移動(dòng)網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容