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

首頁 > 系統 > iOS > 正文

iOS如何為導航欄添加播放動畫

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

本文實例為大家分享了iOS為導航欄添加播放動畫的具體代碼,供大家參考,具體內容如下

FLAudioVisualizerView.h

#import <UIKit/UIKit.h>@interface FLAudioVisualizerView : UIView#pragma mark -// 默認UIEdgeInsetsZero@property (nonatomic, assign) UIEdgeInsets contentInsets;// 默認為4@property (nonatomic, assign) NSInteger barCount;@property (nonatomic, copy) NSArray<NSNumber *> *barHeightRateList;// 默認白色@property (nonatomic, copy) UIColor *barColor;// 默認2@property (nonatomic, assign) CGFloat cornerRadius;// 默認5@property (nonatomic, assign) CGFloat barSpace;// NSValue包裝CGPoint@property (nonatomic, strong) NSArray<NSValue *> *aniamteOffsetList;@property (nonatomic, readonly) BOOL isAniamting;- (void)restart;- (void)start;- (void)stop;@end

FLAudioVisualizerView.m

#import "FLAudioVisualizerView.h"@interface FLAudioVisualizerView ()@property (nonatomic, strong) NSArray<UIView *> *barList;@property (nonatomic, assign) BOOL isAniamting;@end@implementation FLAudioVisualizerView#pragma mark -- (id)initWithFrame:(CGRect)frame{  if (self = [super initWithFrame:frame]) {    [self setBarCount:4];    _barSpace = 5;    _barColor = [UIColor whiteColor];    self.cornerRadius = 2;    self.barHeightRateList = @[@(0.4), @(0.75), @(0.55), @(0.95)];    self.transform = CGAffineTransformMakeRotation(M_PI);    self.aniamteOffsetList = @[[NSValue valueWithCGPoint:CGPointMake(0.1, 0.4)],                  [NSValue valueWithCGPoint:CGPointMake(0.75, 0.3)],                  [NSValue valueWithCGPoint:CGPointMake(0.2, 0.55)],                  [NSValue valueWithCGPoint:CGPointMake(0.94, 0.4)],                  ];    self.contentInsets = UIEdgeInsetsZero;  }  return self;}- (void)layoutSubviews{  [super layoutSubviews];  CGRect rect = self.bounds;  if (fabs(rect.size.width) < 1e-3 || fabs(rect.size.height) < 1e-3 || rect.size.width < 0 || rect.size.height < 0 ) {    return;  }  rect = CGRectWithEdgeInserts(rect, self.contentInsets);  __block CGRect barRect = rect;  barRect.size.width = (rect.size.width - (self.barCount - 1) * self.barSpace) / self.barCount;  NSArray<NSNumber *> *barHeightRateList = self.barHeightRateList.reverseObjectEnumerator.allObjects;  [self.barList enumerateObjectsUsingBlock:^(UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {    obj.layer.anchorPoint = CGPointZero;    CGFloat rate = 1.0;    if (idx < barHeightRateList.count) rate = barHeightRateList[idx].floatValue;    barRect.size.height = rect.size.height * rate;    obj.frame = barRect;    barRect.origin.x += barRect.size.width + self.barSpace;  }];}#pragma mark -static CGRect CGRectWithEdgeInserts(CGRect rect, UIEdgeInsets inserts){  rect.origin.x += inserts.left;  rect.origin.y += inserts.top;  rect.size.width -= inserts.left + inserts.right;  rect.size.height -= inserts.top + inserts.bottom;  return rect;}#pragma mark -- (void)setBarCount:(NSInteger)barCount{  _barCount = barCount;  NSInteger diff = self.barList.count - barCount;  if (diff > 0) {    NSArray<UIView *> *removeBarViewList = [self.barList subarrayWithRange:NSMakeRange(barCount, diff)];    [removeBarViewList makeObjectsPerformSelector:@selector(removeFromSuperview)];    self.barList = [self.barList subarrayWithRange:NSMakeRange(0, barCount)];  } else if (diff < 0) {    diff = -diff;    NSMutableArray *addBarViewList = [NSMutableArray arrayWithCapacity:diff];    for (NSInteger index = 0; index < diff; index ++) {      UIView *imageView = [[UIView alloc] init];      imageView.clipsToBounds = YES;      imageView.layer.cornerRadius = self.cornerRadius;      [addBarViewList addObject:imageView];      imageView.backgroundColor = [UIColor whiteColor];    }    if (self.barList) {      self.barList = [self.barList arrayByAddingObjectsFromArray:addBarViewList];    } else {      self.barList = addBarViewList;    }  }  [self.barList enumerateObjectsUsingBlock:^(UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {    [self addSubview:obj];  }];}- (void)setCornerRadius:(CGFloat)cornerRadius{  _cornerRadius = cornerRadius;  [self.barList enumerateObjectsUsingBlock:^(UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {    obj.layer.cornerRadius = cornerRadius;  }];}- (void)setBarColor:(UIColor *)barColor{  [self.barList enumerateObjectsUsingBlock:^(UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {    obj.backgroundColor = barColor;  }];}- (void)aniamteWithBar:(UIView *)bar startHeight:(CGFloat)startHeight endHeight:(CGFloat)endHeight{  CABasicAnimation * animation;  animation = [CABasicAnimation animationWithKeyPath:@"bounds.size.height"];  animation.fromValue = [NSNumber numberWithFloat:startHeight];  animation.toValue = [NSNumber numberWithFloat:endHeight];  animation.duration = 0.25;  animation.repeatCount = MAXFLOAT;  animation.autoreverses = YES;  [bar.layer addAnimation:animation forKey:@"bounds.size.height"];}- (void)restart{  [self stop];  [self start];}- (void)start{  if (self.isAniamting) return;  self.isAniamting = YES;  NSArray<NSValue *> *aniamteOffsetList = self.aniamteOffsetList.reverseObjectEnumerator.allObjects;  [self.barList enumerateObjectsUsingBlock:^(UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {    if (idx < aniamteOffsetList.count) {      CGRect rect = CGRectWithEdgeInserts(self.bounds, self.contentInsets);      CGPoint offset = aniamteOffsetList[idx].CGPointValue;      [self aniamteWithBar:obj startHeight:rect.size.height * offset.x endHeight:rect.size.height * offset.y];    }  }];}- (void)stop{  self.isAniamting = NO;  [self.barList enumerateObjectsUsingBlock:^(UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {    [obj.layer removeAllAnimations];  }];}@end

ViewController.m

#import "ViewController.h"#import "FLAudioVisualizerView.h"#define kScreen_width [UIScreen mainScreen].bounds.size.width#define SCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height@interface ViewController ()@property (nonatomic, strong) FLAudioVisualizerView *visualizerView;@end@implementation ViewController- (void)viewDidLoad {  [super viewDidLoad];  self.view.backgroundColor = [UIColor whiteColor];    self.title = @"首頁";  //修改導航欄標題字體大小和顏色,背景顏色  [self.navigationController.navigationBar setBarTintColor:[UIColor whiteColor]];  [self.navigationController.navigationBar setTitleTextAttributes:@{                                   NSFontAttributeName:[UIFont systemFontOfSize:17],NSForegroundColorAttributeName:[UIColor blackColor]                                   }];  UIButton *playBtn = [UIButton buttonWithType:UIButtonTypeCustom];  playBtn.frame = CGRectMake(10, 100, 100, 20);  [self.view addSubview:playBtn];  [playBtn setTitle:@"開始播放" forState:UIControlStateNormal];  [playBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];  [playBtn addTarget:self action:@selector(playClick) forControlEvents:UIControlEventTouchUpInside];    UIButton *stopPlayBtn = [UIButton buttonWithType:UIButtonTypeCustom];  stopPlayBtn.frame = CGRectMake(10, 150, 100, 20);  [self.view addSubview:stopPlayBtn];  [stopPlayBtn setTitle:@"停止播放" forState:UIControlStateNormal];  [stopPlayBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];  [stopPlayBtn addTarget:self action:@selector(stopPlayBtnClick) forControlEvents:UIControlEventTouchUpInside];  [self setupVisualizerView];}- (void)setupVisualizerView{  CGSize size = CGSizeMake(23, 22);  UIEdgeInsets insets = UIEdgeInsetsMake(10, 0, 10, 20);  size.width += insets.left + insets.right;  size.height += insets.top + insets.bottom;  // 直接直接使用visualizerView的時候,在側滑返回的時候,會出現很奇怪的現象,visualizerView的frame會發生變化,導致顯示異常  UIView *containerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, size.width, size.height)];  FLAudioVisualizerView *visualizerView = [[FLAudioVisualizerView alloc] initWithFrame:CGRectMake(0, 0, size.width, size.height)];  self.visualizerView = visualizerView;  [containerView addSubview:visualizerView];  visualizerView.barColor = [UIColor colorWithRed:63/255 green:63/255 blue:64/255 alpha:1];  visualizerView.contentInsets = insets;  UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(gotoCurrentPlayPage)];  [containerView addGestureRecognizer:tap];  UIBarButtonItem *barItem = [[UIBarButtonItem alloc] initWithCustomView:containerView];  self.navigationItem.rightBarButtonItem = barItem;        }- (void)gotoCurrentPlayPage{  NSLog(@"點擊了播放按鈕");}- (void)playClick{  NSLog(@"1");  [self.visualizerView restart];}- (void)stopPlayBtnClick{  NSLog(@"2");  [self.visualizerView stop];}- (void)didReceiveMemoryWarning {  [super didReceiveMemoryWarning];  // Dispose of any resources that can be recreated.}@end

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产91在线播放九色快色| 国产精品一区二区久久久| 亚洲香蕉成视频在线观看| 成人综合网网址| 欧美激情免费在线| 久久久影视精品| 成人久久精品视频| 精品中文字幕在线观看| 欧美色xxxx| 欧美一性一乱一交一视频| 国产精品人成电影在线观看| 欧美性猛交xxxx免费看久久久| 欧洲美女7788成人免费视频| 亚洲人成网站在线播| 美日韩在线视频| 精品国产一区二区三区久久久| 在线性视频日韩欧美| 97激碰免费视频| 亚洲精品国产精品国自产观看浪潮| 欧美日韩久久久久| 欧美综合在线第二页| 欧美日韩国产页| 91久久国产精品| 久久九九有精品国产23| 91地址最新发布| 精品国产欧美成人夜夜嗨| 国产成人aa精品一区在线播放| 一区二区欧美久久| 91久热免费在线视频| 综合国产在线观看| 91精品国产91| 91精品国产电影| 一个人看的www久久| 日韩av大片在线| 97在线看免费观看视频在线观看| 久久香蕉国产线看观看网| 久色乳综合思思在线视频| 国产美女直播视频一区| 国产精品偷伦视频免费观看国产| 秋霞成人午夜鲁丝一区二区三区| 亚洲视频自拍偷拍| 亚洲香蕉成视频在线观看| 欧美成人免费网| 色综合天天综合网国产成人网| 国产成人精品午夜| 91av在线看| 久久黄色av网站| 4444欧美成人kkkk| 中文字幕亚洲欧美在线| 国产精品自拍网| 久久久久久久久91| 久久久久日韩精品久久久男男| 亚洲精品网址在线观看| 深夜福利91大全| 欧美日韩国产丝袜另类| 精品成人69xx.xyz| 国产福利视频一区二区| 国产精品人成电影在线观看| 日韩欧美一区视频| 日韩欧美精品网址| 性欧美长视频免费观看不卡| 国内揄拍国内精品少妇国语| 精品久久久一区二区| 国产成人精品日本亚洲专区61| 欧美日本亚洲视频| 久久精品视频在线观看| 91久久精品视频| 成人免费视频a| 国产精品激情av在线播放| 在线电影av不卡网址| 91精品国产综合久久香蕉| 久久久午夜视频| 亚洲精选一区二区| 最近2019年好看中文字幕视频| 成人免费高清完整版在线观看| 国产乱人伦真实精品视频| 亚洲乱码国产乱码精品精天堂| 欧美激情视频一区| 欧美性理论片在线观看片免费| 91视频88av| 另类天堂视频在线观看| 亚洲午夜av电影| 亚洲开心激情网| 亚洲一区二区三区视频| 久久久久成人网| 久久精品国产69国产精品亚洲| 国产精品一二三视频| 好吊成人免视频| 色综合天天狠天天透天天伊人| 亚洲精品影视在线观看| 91极品女神在线| 久久久最新网址| 亚洲第一页在线| 久久人91精品久久久久久不卡| 久久亚洲国产精品| 黑人精品xxx一区一二区| 久久精彩免费视频| 亚洲自拍小视频免费观看| 国产香蕉一区二区三区在线视频| 亚洲三级免费看| 一区二区三区www| 久久综合九色九九| 欧美日韩裸体免费视频| 国产手机视频精品| 成人黄色大片在线免费观看| 日韩av在线免费| 欧美激情亚洲自拍| 欧美裸体xxxx极品少妇| 欧美性极品xxxx娇小| 日韩网站在线观看| 精品久久久久久久久久久久久久| 亚洲一区二区三区乱码aⅴ蜜桃女| 姬川优奈aav一区二区| 亚洲欧美国产一本综合首页| 亚洲激情 国产| 国产精品十八以下禁看| 爱福利视频一区| 在线播放国产精品| 国产精品久久久久久久久久久久久| 91精品久久久久| 波霸ol色综合久久| 日韩中文字幕欧美| 欧美性少妇18aaaa视频| 精品一区二区电影| 超在线视频97| 亚洲欧洲国产一区| 成人淫片在线看| 亚洲欧美激情一区| 欧美插天视频在线播放| 国产视频久久久久久久| 国产亚洲a∨片在线观看| 欧美日韩国产一区在线| 成人在线免费观看视视频| 国产亚洲精品久久久久久| 国产一区二区欧美日韩| 国产精品成人一区| 国外成人在线视频| 国产欧美日韩精品在线观看| 91社影院在线观看| 国产精品久久视频| 97视频免费在线看| 欧美激情一区二区三级高清视频| 亚洲人成在线免费观看| 欧美电影免费观看电视剧大全| 亚洲国产高潮在线观看| 97热在线精品视频在线观看| 91久久精品国产91性色| 亚洲国产中文字幕在线观看| 日本一本a高清免费不卡| 日韩欧美在线视频观看| 亚洲精品国产品国语在线| 疯狂做受xxxx欧美肥白少妇| 久久天天躁狠狠躁夜夜av| 91在线观看欧美日韩| 久久久久久国产| 日韩欧美在线观看| 日韩av免费在线观看| 国产精品永久在线| 久久久久中文字幕| 欧美日韩免费网站| 亚州av一区二区| 久久影院模特热| 另类天堂视频在线观看| 亚洲精品国产精品久久清纯直播|