在開辟傍邊,能夠許多時刻都須要做個點贊的需求,假如用按鈕完成,按鈕作為一個體系復合控件,內部是一個 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 = CGAff.netransformMakeScale(0.1f, 0.1f); [UIView animateWithDuration:0.3 animations:^{ self.noStateImgV.alpha = 0.0; self.yesStateImgV.alpha = 1.0; self.yesStateImgV.transform = CGAff.netransformMakeScale(1.0f, 1.0f); self.noStateImgV.transform = CGAff.netransformMakeScale(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
這是一個簡略的完成,最年夜的優勢,也是這篇文章的目標,就是在切換後果上的自界說和自在度!
拋磚引玉,願望年夜家都能做出復合本身心中所想的點贊按鈕!
願望年夜家對本文所述感興致。
【基於UIControl控件完成ios點贊功效】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!