基于UIControl控件实现ios点赞功能

q785740181

q785740181

2016-02-19 11:20

下面这个基于UIControl控件实现ios点赞功能教程由图老师小编精心推荐选出,过程简单易学超容易上手,喜欢就要赶紧get起来哦!

在开发当中,可能很多时候都需要做个点赞的需求,如果用按钮实现,按钮作为一个系统复合控件,外部是一个 View--》UIControl的容器,内部包含了UILabel和UIImage,以及一些排版规则。用UIButton就很难去做一些在“赞”和“取消赞”切换时的效果。
可是我们又很需要UIButton似的事件响应机制。

怎么办?

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

对! 就是使用UIControl。

UIControl在这里有两个突出的优势:

1.作为UIButton的父控件,具有UIButton一样的事件响应机制

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

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

这是一个简单的实现,最大的优势,也是这篇文章的目的,就是在切换效果上的自定义和自由度!
抛砖引玉,希望大家都能做出复合自己心中所想的点赞按钮!

希望大家对本文所述感兴趣。

展开更多 50%)
分享

猜你喜欢

基于UIControl控件实现ios点赞功能

编程语言 网络编程
基于UIControl控件实现ios点赞功能

深入浅析IOS中UIControl

编程语言 网络编程
深入浅析IOS中UIControl

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

详解iOS开发中UItableview控件的数据刷新功能的实现

编程语言 网络编程
详解iOS开发中UItableview控件的数据刷新功能的实现

nice好赞怎么点赞

手机软件 应用软件
nice好赞怎么点赞

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

IOS实现简单的进度条功能

编程语言 网络编程
IOS实现简单的进度条功能

微信推出赞赏功能 点赞还能赏钱

手机软件 应用软件
微信推出赞赏功能 点赞还能赏钱

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

HTML5之HTML元素扩展(下)—增强的Form表单元素值得关注

HTML5之HTML元素扩展(下)—增强的Form表单元素值得关注

win8的快速启动怎么关闭?

win8的快速启动怎么关闭?
下拉加载更多内容 ↓