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

首頁 > 系統 > iOS > 正文

iOS中利用CoreAnimation實現一個時間的進度條效果

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

在iOS中實現進度條通常都是通過不停的設置progress來完成的,這樣的進度條適用于網絡加載(上傳下載文件、圖片等)。但是對于錄制視頻這樣的需求的話,如果是按照每秒來設置進度的話,顯得有點麻煩,于是我就想直接用CoreAnimation來按時間做動畫,只要設置最大時間,其他的就不用管了,然后在視頻暫停與繼續錄制時,對動畫進行暫停和恢復即可。錄制視頻的效果如下:

你可以在這里下載demo

那么接下來就是如何用CoreAnimation實現一個進度條控件了。

首先呢,讓我們創建一個繼承自CAShapeLayer的WKProgressBarLayer。

WKProgressBarLayer默認自身的bounds就是整個進度條的大小。

@interface WKProgressBarLayer : CAShapeLayer@end

 為了方便外部調用,首先在WKProgressBarLayer.h中定義枚舉來表明動畫的四個狀態

typedef NS_ENUM(NSInteger, WKAnimationStatus) { WKAnimationStatusIdle,//空閑 WKAnimationStatusAnimating,//動畫中 WKAnimationStatusPause,//暫停 WKAnimationStatusComplete//完成};

 接下來,定義外部調用的動畫接口

@interface WKProgressBarLayer : CAShapeLayer@property (nonatomic, assign, readonly) WKAnimationStatus animatingStatus;//狀態/** 開始動畫 @param duration 動畫最大時長 */- (void)beginAnimationWithDuration:(CGFloat)duration;/** 暫停 */- (void)pauseAnimation;/** 恢復 */- (void)resumeAnimation;/** 重新開始動畫 @param progress 從哪個進度開始 @param duration 動畫最大時長 */- (void)restartAnimationWithProgress:(CGFloat)progress duration:(NSTimeInterval)duration;@end

 然后,我們在.m實現核心的動畫開始方法startAnimtionWithBeginProgress:duration:,詳細解釋見代碼

- (void)startAnimtionWithBeginProgress:(CGFloat)beginProgress duration:(NSTimeInterval)duration{ [self reset];//重置動畫 //設置path UIBezierPath *fromPath = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, beginProgress * self.bounds.size.width, self.bounds.size.height)];; UIBezierPath *toPath = [UIBezierPath bezierPathWithRect:self.bounds]; self.path = fromPath.CGPath; //創建動畫 CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"path"]; animation.fromValue = (id)fromPath.CGPath; animation.toValue = (id)toPath.CGPath; animation.duration = duration; [animation setValue:@1 forKey:@"progress"];//用于判斷是否是進度動畫 animation.delegate = self; //用于判斷動畫結束 [self addAnimation:animation forKey:@"progressAnimation"]; self.path = toPath.CGPath;}

 然后呢,需要在動畫的delegate與暫停、恢復動畫的方法中分別修改動畫的狀態

- (void)pauseAnimation{ CFTimeInterval pausedTime = [self convertTime:CACurrentMediaTime() fromLayer:nil]; self.speed = 0.0; self.timeOffset = pausedTime; self.animatingStatus = WKAnimationStatusPause;}- (void)resumeAnimation{ CFTimeInterval pausedTime = [self timeOffset]; self.speed = 1.0; self.timeOffset = 0.0; self.beginTime = 0.0; CFTimeInterval timeSincePause = [self convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime; self.beginTime = timeSincePause; self.animatingStatus = WKAnimationStatusAnimating;}#pragma mark - CAAnimationDelegate/* Called when the animation begins its active duration. */- (void)animationDidStart:(CAAnimation *)anim{ if (anim == [self animationForKey:@"progressAnimation"]) {//判斷進度動畫  self.animatingStatus = WKAnimationStatusAnimating; }}- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{ if ([anim valueForKey:@"progress"] && flag == YES) {//判斷進度動畫  self.animatingStatus = WKAnimationStatusComplete; }}

 至此,進度條layer就完成了,現在創建一個控制器來做測試

首先在storyBoard擺上兩個按鈕,分別是開始與重置動畫(界面搭建很簡單,詳情見demo)

然后在ViewDidLoad中添加progressLayer

- (void)viewDidLoad { [super viewDidLoad];   WKProgressBarLayer *progressLayer = [[WKProgressBarLayer alloc] init]; progressLayer.frame = CGRectMake(100, 100, 200, 10);   [self.view.layer addSublayer:progressLayer];   self.progressLayer = progressLayer;}

 接下來,就是動畫開始與重置響應

- (IBAction)startOrPauseAction:(UIButton *)sender {  switch (self.progressLayer.animatingStatus) {   case WKAnimationStatusIdle:{    [self.progressLayer beginAnimationWithDuration:10];   }    break;   case WKAnimationStatusAnimating:{    [self.progressLayer pauseAnimation];   }    break;   case WKAnimationStatusPause:{    [self.progressLayer resumeAnimation];   }    break;   case WKAnimationStatusComplete:{    [self.progressLayer restartAnimationWithProgress:0 duration:10];   }    break;   default:    break; } sender.selected = !sender.selected;}- (IBAction)resetAction:(UIButton *)sender { [self.progressLayer restartAnimationWithProgress:0 duration:10]; self.startOrPauseButton.selected = YES;}

 以上就是代碼主體了,接下來,讓我們看看效果

你可以在這里下載demo

總結

以上所述是小編給大家介紹的iOS中利用CoreAnimation實現一個時間的進度條,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97免费中文视频在线观看| 一区二区三区日韩在线| 国产区亚洲区欧美区| 欧美成年人视频网站欧美| 成人av电影天堂| 亚洲最大av网站| 国产精品第100页| 91久久夜色精品国产网站| 综合欧美国产视频二区| 日韩中文字幕视频| 色综合久久中文字幕综合网小说| 国产91色在线|免| 日韩大陆欧美高清视频区| 国产日韩欧美视频在线| 欧美日韩一区二区在线| 亚洲精品久久久久国产| 久久久视频在线| 日韩va亚洲va欧洲va国产| 精品国内自产拍在线观看| 成人在线中文字幕| 欧美猛交免费看| 91在线视频九色| 国产精品视频午夜| 91在线视频精品| 国产日韩在线看片| 日韩免费在线视频| 综合国产在线观看| 97婷婷大伊香蕉精品视频| 亚洲国产精品99久久| 欧美高清自拍一区| 亚洲第一国产精品| 久久人91精品久久久久久不卡| 亚洲国产精品免费| 欧美日韩国产激情| 91亚洲国产精品| 成人黄色av网站| 91日本在线视频| 亚洲免费福利视频| 日韩av综合中文字幕| 亚洲国产精品久久久| 91人人爽人人爽人人精88v| 午夜精品久久久久久久99热| 亚洲一区中文字幕| 国产在线观看一区二区三区| 国产精品极品尤物在线观看| 亚洲欧美一区二区三区久久| 午夜精品福利在线观看| 日韩最新中文字幕电影免费看| 影音先锋欧美在线资源| 亚洲影视九九影院在线观看| 九色91av视频| 欧美高清视频在线观看| 久久中文字幕国产| 国产精品久久久久久中文字| 亚洲欧美色婷婷| 亚洲护士老师的毛茸茸最新章节| 日韩精品免费观看| 伊人久久男人天堂| 精品亚洲精品福利线在观看| 国语自产精品视频在线看抢先版图片| 国产精品一区二区三区久久| 色综久久综合桃花网| 一区二区三区四区精品| 另类色图亚洲色图| 亚洲精品国产精品国自产观看浪潮| 亚洲福利在线看| 国产精品男人的天堂| 精品免费在线视频| 国产成人91久久精品| 亚洲精品97久久| 久久视频这里只有精品| 一区二区三区高清国产| 欧美日韩国产成人高清视频| 国产精品色悠悠| 成人写真视频福利网| 日韩少妇与小伙激情| 欧美视频第一页| 日韩在线视频一区| 国产精品一区久久久| 欧美成人免费va影院高清| 亚洲一区精品电影| 51视频国产精品一区二区| 69视频在线播放| 久久黄色av网站| 亚洲最大成人免费视频| 国产z一区二区三区| 午夜精品久久久久久久久久久久| 亚洲一区二区三区成人在线视频精品| 日韩欧美亚洲成人| www日韩欧美| 日韩欧美国产一区二区| 欧美激情一二区| 日韩中文字幕免费视频| 97av在线视频免费播放| 日韩美女av在线免费观看| 午夜精品久久久久久99热软件| xvideos亚洲人网站| 欧美激情精品久久久久久蜜臀| 韩国国内大量揄拍精品视频| 欧美国产日韩精品| 色老头一区二区三区在线观看| 欧美大片大片在线播放| 欧美午夜丰满在线18影院| 欧美激情第1页| 在线播放精品一区二区三区| 久久97久久97精品免视看| 久久69精品久久久久久久电影好| 欧美整片在线观看| 欧美视频专区一二在线观看| 91午夜在线播放| 欧美乱大交xxxxx| 亚洲аv电影天堂网| 欧美大片在线免费观看| 在线视频欧美性高潮| 尤物九九久久国产精品的分类| 色av中文字幕一区| 欧美麻豆久久久久久中文| 日韩中文字幕在线视频播放| 亚洲免费成人av电影| 国产精品自产拍在线观看中文| 91精品久久久久久久久久另类| 久久婷婷国产麻豆91天堂| 中文字幕久久精品| 日韩高清中文字幕| 日韩最新在线视频| 欧美精品在线免费观看| 欧美华人在线视频| 亚洲国产成人精品电影| 91成人国产在线观看| 亚洲一区二区三区四区在线播放| 国产精品久久999| 久久精品99久久久香蕉| 久久偷看各类女兵18女厕嘘嘘| 国产国语videosex另类| 日韩精品视频免费| 成人精品福利视频| 亚洲欧美日韩爽爽影院| 奇门遁甲1982国语版免费观看高清| 国产亚洲精品久久久久久牛牛| 欧美成人精品在线播放| 亚洲va码欧洲m码| 国内精品一区二区三区| 久久久久久69| 欧美激情二区三区| 蜜月aⅴ免费一区二区三区| 欧美乱妇40p| 成人激情在线观看| 久久影院资源网| 日韩精品在线视频美女| 欧美黑人xxx| 亚洲精品视频在线观看视频| 久久伊人精品天天| 色先锋久久影院av| 国产精品99久久久久久久久| 91免费看片在线| 日本三级韩国三级久久| 68精品久久久久久欧美| 高清亚洲成在人网站天堂| 欧美大码xxxx| 色琪琪综合男人的天堂aⅴ视频| 亚洲精品v天堂中文字幕| 久久99亚洲热视| 成人黄色大片在线免费观看| 九九热99久久久国产盗摄|