在開發當中,能夠很多時分都需求做個點贊的需求,假如用按鈕完成,按鈕作為一個零碎復合控件,內部是一個 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點贊功用】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!