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

首頁 > 系統 > iOS > 正文

基于UIControl控件實現ios點贊功能

2020-07-26 03:34:05
字體:
來源:轉載
供稿:網友

在開發當中,可能很多時候都需要做個點贊的需求,如果用按鈕實現,按鈕作為一個系統復合控件,外部是一個 View--》UIControl的容器,內部包含了UILabel和UIImage,以及一些排版規則。用UIButton就很難去做一些在“贊”和“取消贊”切換時的效果。
可是我們又很需要UIButton似的事件響應機制。

怎么辦?

對! 就是使用UIControl。

UIControl在這里有兩個突出的優勢:

1.作為UIButton的父控件,具有UIButton一樣的事件響應機制

2.作為UIView的簡單子控件,具有作為容器視圖的潛質

設計思路:實現一個自定義控件,繼承UIControl,里面包含一些視圖,包含什么視圖由你的需求決定,我的是兩張圖片。 然后在事件響應時,兩張圖片進行切換。切換動畫可以自定義。這樣就實現了一個切換效果自由度很大的點贊按鈕哦!

參考代碼如下:

#import <UIKit/UIKit.h> typedef NS_ENUM(NSInteger, UIControlFlagMode) {   FlagModelNO,   FlagModelYES,   FlagModelDefalt }; @interface UIControlFlagView : UIControl @property (nonatomic, strong) UIImage*noStateImg; @property (nonatomic, strong) UIImage*yesStateImg; @property (nonatomic, strong) UIImage*defaultStateImg; @property (nonatomic, assign) UIControlFlagMode flag; - (void)setFlag:(UIControlFlagMode)flag withAnimation:(BOOL)animation; @end 

m文件:

#import "UIControlFlagView.h" @interface UIControlFlagView() @property (nonatomic, strong) UIImageView*noStateImgV; @property (nonatomic, strong) UIImageView*yesStateImgV; @property (nonatomic, strong) UIImageView*defaultStateImgV; @end @implementation UIControlFlagView - (id)initWithFrame:(CGRect)frame {   self = [super initWithFrame:frame];   if (self) {     // Initialization code   }   return self; } - (void)setNoStateImg:(UIImage *)noStateImg {   if (!self.noStateImgV)   {     self.noStateImgV = [[UIImageView alloc] initWithFrame:self.bounds];     self.noStateImgV.contentMode = UIViewContentModeCenter;     [self addSubview:self.noStateImgV];     self.flag = FlagModelNO;//default style   }   self.noStateImgV.image = noStateImg;   _noStateImg = noStateImg; } - (void)setYesStateImg:(UIImage *)yesStateImg {   if (!self.yesStateImgV)   {     self.yesStateImgV = [[UIImageView alloc] initWithFrame:self.bounds];     self.yesStateImgV.contentMode = UIViewContentModeCenter;     [self addSubview:self.yesStateImgV];     self.yesStateImgV.alpha = 0.0;   }    self.yesStateImgV.image = yesStateImg;   _yesStateImg = yesStateImg; } - (void)setDefaultStateImg:(UIImage *)defaultStateImg {   if (!self.defaultStateImgV)   {     self.defaultStateImgV = [[UIImageView alloc] initWithFrame:self.bounds];     self.defaultStateImgV.contentMode = UIViewContentModeCenter;     [self addSubview:self.defaultStateImgV];   }   self.defaultStateImgV.image = defaultStateImg;   _defaultStateImg = defaultStateImg; } - (void)setFlag:(UIControlFlagMode)flag withAnimation:(BOOL)animation {   if (animation)   {     //no-->yes     if (_flag == FlagModelNO && flag == FlagModelYES)     {      self.yesStateImgV.transform = CGAffineTransformMakeScale(0.1f, 0.1f);      [UIView animateWithDuration:0.3 animations:^{        self.noStateImgV.alpha = 0.0;        self.yesStateImgV.alpha = 1.0;        self.yesStateImgV.transform = CGAffineTransformMakeScale(1.0f, 1.0f);        self.noStateImgV.transform = CGAffineTransformMakeScale(2.0f, 2.0f);      }     completion:^(BOOL finished)     {        self.yesStateImgV.transform = CGAffineTransformMakeScale(1.0f, 1.0f);        self.noStateImgV.transform = CGAffineTransformMakeScale(1.0f, 1.0f);      }];     }     //yes-->no     else if(_flag == FlagModelYES && flag == FlagModelNO)     {       self.noStateImgV.transform = CGAffineTransformMakeScale(0.1f, 0.1f);       [UIView animateWithDuration:0.3 animations:^{         self.noStateImgV.alpha = 1.0;         self.yesStateImgV.alpha = 0.0;         self.yesStateImgV.transform = CGAffineTransformMakeScale(2.0f, 2.0f);         self.noStateImgV.transform = CGAffineTransformMakeScale(1.0f, 1.0f);       }        completion:^(BOOL finished)        {          self.yesStateImgV.transform = CGAffineTransformMakeScale(1.0f, 1.0f);          self.noStateImgV.transform = CGAffineTransformMakeScale(1.0f, 1.0f);        }];     }   }   else   {     //no-->yes     if (_flag == FlagModelNO && flag == FlagModelYES)     {         self.noStateImgV.alpha = 0.0;         self.yesStateImgV.alpha = 1.0;         self.yesStateImgV.transform = CGAffineTransformMakeScale(1.0f, 1.0f);         self.noStateImgV.transform = CGAffineTransformMakeScale(1.0f, 1.0f);     }     //yes-->no     else if(_flag == FlagModelYES && flag == FlagModelNO)     {       self.noStateImgV.alpha = 1.0;       self.yesStateImgV.alpha = 0.0;       self.yesStateImgV.transform = CGAffineTransformMakeScale(1.0f, 1.0f);       self.noStateImgV.transform = CGAffineTransformMakeScale(1.0f, 1.0f);     }   }    _flag = flag; } @end

這是一個簡單的實現,最大的優勢,也是這篇文章的目的,就是在切換效果上的自定義和自由度!
拋磚引玉,希望大家都能做出復合自己心中所想的點贊按鈕!

希望大家對本文所述感興趣。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文综合在线观看| 欧美精品免费在线| 都市激情亚洲色图| 国产精品久久久久久影视| 国产成人精品久久久| 91免费在线视频| 日韩精品在线电影| 欧美精品18videos性欧| 91av视频在线免费观看| 国产精品av免费在线观看| 亚洲精品天天看| 97精品一区二区视频在线观看| 亚洲综合av影视| 亚洲香蕉成人av网站在线观看| 欧美性极品xxxx做受| 97热精品视频官网| 亚洲电影av在线| 亚洲欧美日韩区| 91精品国产综合久久香蕉最新版| 成人中文字幕+乱码+中文字幕| 欧美日韩电影在线观看| 亚洲香蕉伊综合在人在线视看| 欧美激情一区二区久久久| 亚洲第一视频在线观看| 国语自产精品视频在线看一大j8| 热久久99这里有精品| 日韩资源在线观看| 久久精品中文字幕免费mv| 国产成人精品综合久久久| 国产精品免费福利| 黑人巨大精品欧美一区免费视频| 成人观看高清在线观看免费| 国产精品美乳在线观看| 日韩激情片免费| 永久免费看mv网站入口亚洲| 日韩亚洲第一页| 国产午夜精品全部视频播放| 国产精品中文在线| 97在线视频观看| 国产91对白在线播放| 一区二区亚洲欧洲国产日韩| 国产精品视频永久免费播放| 成人欧美一区二区三区黑人| 69国产精品成人在线播放| 精品露脸国产偷人在视频| 亚洲一区av在线播放| 久久91亚洲人成电影网站| 国产精品入口福利| 欧美精品久久久久久久免费观看| 久久激情视频久久| 97久久超碰福利国产精品…| 亚洲人成亚洲人成在线观看| 久久人人爽国产| 91av视频在线播放| 成人黄色网免费| 伊人青青综合网站| 日韩动漫免费观看电视剧高清| 亚洲国产97在线精品一区| 国产色婷婷国产综合在线理论片a| 欧美成人午夜视频| 亚洲美女免费精品视频在线观看| 亚洲精品视频二区| 97涩涩爰在线观看亚洲| 久久精品一偷一偷国产| 欧美麻豆久久久久久中文| 永久免费精品影视网站| 国模gogo一区二区大胆私拍| 国产精品视频久久| 日韩网站免费观看高清| 亚洲毛片在线免费观看| 亚洲精品suv精品一区二区| 亚洲一品av免费观看| 国产欧美一区二区三区视频| 欧美亚洲在线播放| 欧美激情亚洲精品| 国产精品视频网址| 日韩av免费看网站| 日韩精品久久久久久福利| 97精品国产aⅴ7777| 久久久999精品免费| 国产精品视频中文字幕91| 欧美床上激情在线观看| 精品久久久久久久久中文字幕| 亚洲激情视频网站| 欧美制服第一页| 精品久久中文字幕| 欧美成人合集magnet| 久久91亚洲精品中文字幕| 国产日韩在线亚洲字幕中文| 日韩www在线| 亚洲伦理中文字幕| 国产精品久久9| 成人激情视频在线| 国产成人高清激情视频在线观看| 亚洲天堂开心观看| 欧美孕妇孕交黑巨大网站| 尤物99国产成人精品视频| 欧美在线一区二区视频| 中文国产亚洲喷潮| 亚洲黄页网在线观看| 亚洲免费视频观看| 日韩福利视频在线观看| 97精品国产97久久久久久免费| 在线播放国产精品| 日韩欧美中文在线| 中文字幕日韩免费视频| 欧美日韩午夜剧场| 国产精品成熟老女人| 91精品国产91久久| 国产精品白丝av嫩草影院| 亚洲美女福利视频网站| 精品人伦一区二区三区蜜桃免费| 欧美黑人巨大精品一区二区| 久久国产加勒比精品无码| 亚洲伊人久久大香线蕉av| 欧美日韩在线影院| 久久青草精品视频免费观看| 亚洲97在线观看| 久久中国妇女中文字幕| 亚洲第一二三四五区| 亚洲欧美变态国产另类| 亚洲高清一二三区| 欧美大片大片在线播放| 91成人精品网站| 在线观看欧美日韩国产| 国产成人福利网站| 久久琪琪电影院| 成人中心免费视频| 欧美专区国产专区| 精品一区二区三区四区| 国产精品久久久久免费a∨| 中文字幕日韩专区| 欧美成人午夜激情视频| 91在线无精精品一区二区| 久久精品国产一区| www.久久久久| 国产极品精品在线观看| 影音先锋欧美精品| 青草热久免费精品视频| 黑人巨大精品欧美一区二区一视频| 精品亚洲一区二区三区在线播放| 国产91精品不卡视频| 欧美激情欧美激情在线五月| 国产精品欧美亚洲777777| 97视频在线观看免费| 欧美日韩国产中文精品字幕自在自线| 日韩精品中文在线观看| 久久精品电影网站| 国产成人精品日本亚洲| 久久久久久久999精品视频| 亚洲精品视频网上网址在线观看| 欧美刺激性大交免费视频| 欧美与欧洲交xxxx免费观看| 综合欧美国产视频二区| 精品呦交小u女在线| 影音先锋欧美在线资源| 亚洲欧美在线一区| 亚洲欧洲在线观看| 8050国产精品久久久久久| 一区二区三区久久精品| 欧美亚洲另类激情另类| 久久夜精品香蕉| 97久久超碰福利国产精品…| 亚洲国产精品va在线看黑人动漫|