iOS實(shí)現(xiàn)自定義購(gòu)物車角標(biāo)顯示購(gòu)物數(shù)量(添加商品時(shí)角標(biāo)抖動(dòng) Vie)
前言:
適用場(chǎng)景:商城類的 App 。將自定義的購(gòu)物車 view 設(shè)置為 navigationItem 的導(dǎo)航欄按鈕。效果圖如下:
圖1、右上角的購(gòu)物車即是我們定義的view
實(shí)現(xiàn)原理:
1、利用 navigationItem 可以將 UIView 設(shè)置為導(dǎo)航欄的按鈕;
2、將一個(gè) UIButton 和 一個(gè) UILabel 添加到一個(gè) UIView 上。然后將這個(gè) UIView 設(shè)置為 navigationItem 的右側(cè)按鈕;3、UILabel 控件的動(dòng)畫效果。
具體實(shí)現(xiàn)代碼如下:
1、ShopCarView.h 文件
#import @protocol ShopCarButtonDelegate <</span>NSObject> // 代理的方法,在此方法內(nèi),完成按鈕的點(diǎn)擊事件。 - (void)shopCarButtonClickAction; @end @interfaceShopCarView : UIView @property (nonatomic, assign)id<</span>ShopCarButtonDelegate> delegate; // 為購(gòu)物車設(shè)置角標(biāo)內(nèi)數(shù)值 - (void)setShopCarCount:(NSString *)count; @end
2、ShopCarView.m 文件
#import "ShopCarView.h" @interfaceShopCarView() @property (nonatomic, strong)UIButton *carButton; @property (nonatomic, strong)UILabel *countLabel; @end @implementation ShopCarView - (instancetype)initWithFrame:(CGRect)frame{ CGRect myFrame = CGRectMake(0, 0, 40, 40); self = [superinitWithFrame:myFrame]; if (self) { [selfaddSubview:self.carButton]; } returnself; } - (UIButton *)carButton{ if (!_carButton) { _carButton = [UIButtonbuttonWithType:UIButtonTypeCustom]; _carButton.frame = CGRectMake(0, 8, 32, 32); [_carButtonsetImage:[UIImageimageNamed:@"購(gòu)物1"] forState:UIControlStateNormal]; [_carButtonaddTarget:selfaction:@selector(shopCarButtonAction) forControlEvents:UIControlEventTouchUpInside]; } return_carButton; } - (UILabel *)countLabel{ if (!_countLabel) { _countLabel = [[UILabelalloc] initWithFrame:CGRectMake(24, 5, 16, 16)]; _countLabel.backgroundColor = [UIColorredColor]; _countLabel.textAlignment = NSTextAlignmentCenter; _countLabel.textColor = [UIColorwhiteColor]; _countLabel.layer.cornerRadius = 8; _countLabel.font = [UIFontsystemFontOfSize:12]; _countLabel.layer.masksToBounds = YES; [selfaddSubview:_countLabel]; } return_countLabel; } // 為購(gòu)物車設(shè)置角標(biāo)內(nèi)數(shù)值 - (void)setShopCarCount:(NSString *)count{ if ([count integerValue] == 0) { if (_countLabel) { [_countLabelremoveFromSuperview]; _countLabel = nil; } return; } if ([count integerValue] > 9) { self.countLabel.text = @"9+"; }else{ self.countLabel.text = count; } [selfshakeView:_countLabel]; } // 實(shí)現(xiàn)的代理方法 - (void)shopCarButtonAction{ [self.delegateshopCarButtonClickAction]; } // 實(shí)現(xiàn)抖動(dòng)效果 -(void)shakeView:(UIView*)viewToShake { CGFloat t =2.0; CGAffineTransform translateRight =CGAffineTransformTranslate(CGAffineTransformIdentity, t,0.0); CGAffineTransform translateLeft =CGAffineTransformTranslate(CGAffineTransformIdentity,-t,0.0); viewToShake.transform = translateLeft; [UIViewanimateWithDuration:0.07delay:0.0options:UIViewAnimationOptionAutoreverse|UIViewAnimationOptionRepeatanimations:^{ [UIViewsetAnimationRepeatCount:2.0]; viewToShake.transform = translateRight; } completion:^(BOOL finished){ if(finished){ [UIViewanimateWithDuration:0.05delay:0.0options:UIViewAnimationOptionBeginFromCurrentStateanimations:^{ viewToShake.transform =CGAffineTransformIdentity; } completion:NULL]; } }]; } @end
代碼很簡(jiǎn)單,邏輯也比較清晰。使用代理方法,將自定義的 View 的屬性隱藏起來,打到很好的封裝效果。
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!
相關(guān)文章
iOS 高德地圖仿微信發(fā)送實(shí)時(shí)位置
這篇文章主要介紹了iOS 高德地圖仿微信發(fā)送實(shí)時(shí)位置,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-03-03詳解Swift 利用Opration和OprationQueue來下載網(wǎng)絡(luò)圖片
這篇文章主要介紹了詳解Swift 利用Opration和OprationQueue來下載網(wǎng)絡(luò)圖片的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-09-09淺談強(qiáng)大易用支持URL Rewrite的iOS路由庫(kù)FFRouter
FRouter 是 iOS 中一個(gè)強(qiáng)大且易用的 URL 路由庫(kù),支持 URL Rewrite,基于匹配查找 URL,效率高。非常具有實(shí)用價(jià)值,需要的朋友可以參考下2018-10-10flutter狀態(tài)管理Provider的使用學(xué)習(xí)
這篇文章主要為大家介紹了flutter狀態(tài)管理Provider的使用學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07IOS動(dòng)畫效果源代碼整理(粒子、雪花、火焰、河流、蒸汽)
本篇文章給大家整理的IOS的關(guān)于動(dòng)畫的效果代碼整理,很多效果非常的好看,有興趣的學(xué)下。2018-01-01