码迷,mamicode.com
首页 > 移动开发 > 详细

?关于ios中的点赞控件效果的实现--UIControl

时间:2015-10-30 14:21:51      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:

关于ios中的点赞控件效果的实现--UIControl 



在开发当中,可能很多时候都需要做个点赞的需求,如果用按钮实现,按钮作为一个系统复合控件,外部是一个 View--》UIControl的容器,

内部包含了UILabel和UIImage,以及一些排版规则。用UIButton就很难去做一些在“赞”和“取消赞”切换时的效果。

可是我们又很需要UIButton似的事件响应机制。

怎么办?

对! 就是使用UIControl。

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

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

2.作为UIView的简单子控件,具有作为容器视图的潜质


设计思路:实现一个自定义控件,继承UIControl,里面包含一些视图,包含什么视图由你的需求决定,我的是两张图片。 然后在事件响应时,两张图片进行切换。切换动画可以自定义。这样就实现了一个切换效果自由度很大的点赞按钮哦!

参考代码如下:

[objc] view plaincopyprint?

  1. #import <UIKit/UIKit.h>  

  2.   

  3. typedef NS_ENUM(NSInteger, UIControlFlagMode) {  

  4.     FlagModelNO,  

  5.     FlagModelYES,  

  6.     FlagModelDefalt  

  7. };  

  8.   

  9. @interface  UIControlFlagView : UIControl  

  10.   

  11.   

  12. @property (nonatomicstrong) UIImage*noStateImg;  

  13. @property (nonatomicstrong) UIImage*yesStateImg;  

  14. @property (nonatomicstrong) UIImage*defaultStateImg;  

  15.   

  16. @property (nonatomic, assign) UIControlFlagMode flag;  

  17.   

  18. - (void)setFlag:(UIControlFlagMode)flag withAnimation:(BOOL)animation;  

  19.   

  20. @end  


m文件:

[objc] view plaincopyprint?

  1. #import "UIControlFlagView.h"  

  2.   

  3. @interface UIControlFlagView()  

  4.   

  5. @property (nonatomicstrong) UIImageView*noStateImgV;  

  6. @property (nonatomicstrong) UIImageView*yesStateImgV;  

  7. @property (nonatomicstrong) UIImageView*defaultStateImgV;  

  8.   

  9. @end  

  10.   

  11. @implementation UIControlFlagView  

  12.   

  13. - (id)initWithFrame:(CGRect)frame  

  14. {  

  15.     self = [super initWithFrame:frame];  

  16.     if (self) {  

  17.         // Initialization code  

  18.     }  

  19.     return self;  

  20. }  

  21.   

  22.   

  23. - (void)setNoStateImg:(UIImage *)noStateImg  

  24. {  

  25.     if (!self.noStateImgV)  

  26.     {  

  27.         self.noStateImgV = [[UIImageView alloc] initWithFrame:self.bounds];  

  28.         self.noStateImgV.contentMode = UIViewContentModeCenter;  

  29.         [self addSubview:self.noStateImgV];  

  30.         self.flag = FlagModelNO;//default style  

  31.     }  

  32.     self.noStateImgV.image = noStateImg;  

  33.     _noStateImg = noStateImg;  

  34. }  

  35.   

  36. - (void)setYesStateImg:(UIImage *)yesStateImg  

  37. {  

  38.     if (!self.yesStateImgV)  

  39.     {  

  40.         self.yesStateImgV = [[UIImageView alloc] initWithFrame:self.bounds];  

  41.         self.yesStateImgV.contentMode = UIViewContentModeCenter;  

  42.         [self addSubview:self.yesStateImgV];  

  43.         self.yesStateImgV.alpha = 0.0;  

  44.     }  

  45.      self.yesStateImgV.image = yesStateImg;  

  46.     _yesStateImg = yesStateImg;  

  47. }  

  48.   

  49. - (void)setDefaultStateImg:(UIImage *)defaultStateImg  

  50. {  

  51.     if (!self.defaultStateImgV)  

  52.     {  

  53.         self.defaultStateImgV = [[UIImageView alloc] initWithFrame:self.bounds];  

  54.         self.defaultStateImgV.contentMode = UIViewContentModeCenter;  

  55.         [self addSubview:self.defaultStateImgV];  

  56.     }  

  57.     self.defaultStateImgV.image = defaultStateImg;  

  58.     _defaultStateImg = defaultStateImg;  

  59. }  

  60.   

  61. - (void)setFlag:(UIControlFlagMode)flag withAnimation:(BOOL)animation  

  62. {  

  63.      

  64.       

  65.     if (animation)  

  66.     {  

  67.        //no-->yes  

  68.         if (_flag == FlagModelNO && flag == FlagModelYES)  

  69.         {  

  70.           self.yesStateImgV.transform = CGAffineTransformMakeScale(0.1f0.1f);  

  71.               

  72.           [UIView animateWithDuration:0.3 animations:^{  

  73.                

  74.               self.noStateImgV.alpha = 0.0;  

  75.               self.yesStateImgV.alpha = 1.0;  

  76.               self.yesStateImgV.transform = CGAffineTransformMakeScale(1.0f1.0f);  

  77.               self.noStateImgV.transform = CGAffineTransformMakeScale(2.0f2.0f);  

  78.                 

  79.           }  

  80.         completion:^(BOOL finished)  

  81.         {  

  82.               self.yesStateImgV.transform = CGAffineTransformMakeScale(1.0f1.0f);  

  83.               self.noStateImgV.transform = CGAffineTransformMakeScale(1.0f1.0f);  

  84.           }];  

  85.               

  86.         }  

  87.         //yes-->no  

  88.         else if(_flag == FlagModelYES && flag == FlagModelNO)  

  89.         {  

  90.             self.noStateImgV.transform = CGAffineTransformMakeScale(0.1f0.1f);  

  91.               

  92.             [UIView animateWithDuration:0.3 animations:^{  

  93.                   

  94.                 self.noStateImgV.alpha = 1.0;  

  95.                 self.yesStateImgV.alpha = 0.0;  

  96.                 self.yesStateImgV.transform = CGAffineTransformMakeScale(2.0f2.0f);  

  97.                 self.noStateImgV.transform = CGAffineTransformMakeScale(1.0f1.0f);  

  98.                   

  99.             }  

  100.               completion:^(BOOL finished)  

  101.              {  

  102.                  self.yesStateImgV.transform = CGAffineTransformMakeScale(1.0f1.0f);  

  103.                  self.noStateImgV.transform = CGAffineTransformMakeScale(1.0f1.0f);  

  104.              }];  

  105.         }  

  106.           

  107.     }  

  108.     else  

  109.     {  

  110.         //no-->yes  

  111.         if (_flag == FlagModelNO && flag == FlagModelYES)  

  112.         {  

  113.                 self.noStateImgV.alpha = 0.0;  

  114.                 self.yesStateImgV.alpha = 1.0;  

  115.                 self.yesStateImgV.transform = CGAffineTransformMakeScale(1.0f1.0f);  

  116.                 self.noStateImgV.transform = CGAffineTransformMakeScale(1.0f1.0f);  

  117.         }  

  118.         //yes-->no  

  119.         else if(_flag == FlagModelYES && flag == FlagModelNO)  

  120.         {  

  121.             self.noStateImgV.alpha = 1.0;  

  122.             self.yesStateImgV.alpha = 0.0;  

  123.             self.yesStateImgV.transform = CGAffineTransformMakeScale(1.0f1.0f);  

  124.             self.noStateImgV.transform = CGAffineTransformMakeScale(1.0f1.0f);  

  125.         }  

  126.     }  

  127.       

  128.      _flag = flag;  

  129. }  

  130.   

  131.   

  132. @end  


这是一个简单的实现,最大的优势,也是这篇文章的目的,就是在切换效果上的自定义和自由度!

抛砖引玉,希望大家都能做出复合自己心中所想的点赞按钮!


?关于ios中的点赞控件效果的实现--UIControl

标签:

原文地址:http://my.oschina.net/u/2407613/blog/523974

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!