這篇文章給大家分享的是有關(guān)iOS怎么為導(dǎo)航欄添加播放動畫的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
十年的高明網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。成都全網(wǎng)營銷的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整高明建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“高明網(wǎng)站設(shè)計”,“高明網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。
具體內(nèi)容如下
FLAudioVisualizerView.h
#import <UIKit/UIKit.h> @interface FLAudioVisualizerView : UIView #pragma mark - // 默認(rèn)UIEdgeInsetsZero @property (nonatomic, assign) UIEdgeInsets contentInsets; // 默認(rèn)為4 @property (nonatomic, assign) NSInteger barCount; @property (nonatomic, copy) NSArray<NSNumber *> *barHeightRateList; // 默認(rèn)白色 @property (nonatomic, copy) UIColor *barColor; // 默認(rèn)2 @property (nonatomic, assign) CGFloat cornerRadius; // 默認(rèn)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 = @"首頁"; //修改導(dǎo)航欄標(biāo)題字體大小和顏色,背景顏色 [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的時候,在側(cè)滑返回的時候,會出現(xiàn)很奇怪的現(xiàn)象,visualizerView的frame會發(fā)生變化,導(dǎo)致顯示異常 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
感謝各位的閱讀!關(guān)于“iOS怎么為導(dǎo)航欄添加播放動畫”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
網(wǎng)站題目:iOS怎么為導(dǎo)航欄添加播放動畫
本文鏈接:http://muchs.cn/article12/jehcgc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號、搜索引擎優(yōu)化、網(wǎng)站營銷、網(wǎng)站設(shè)計公司、云服務(wù)器、響應(yīng)式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)