定制选择范围的按钮RangeButton
定制选择范围的按钮RangeButton
效果:
源码:
RangeButton.h 与 RangeButton.m
- //
- // RangeButton.h
- // PulsingView
- //
- // Created by YouXianMing on 14/10/29.
- // Copyright (c) 2014年 YouXianMing. All rights reserved.
- //
- #import <Foundation/Foundation.h>
- #import <UIKit/UIKit.h>
- typedef void (^RangeButtonCenterLabel)(UILabel *label);
- @interface RangeButton : UIView
- /**
- * 最开始显示的值
- */
- @property (nonatomic, strong) NSNumber *startValue;
- /**
- * 每一次增加或者减少的值
- */
- @property (nonatomic, strong) NSNumber *stepValue;
- /**
- * 最大值
- */
- @property (nonatomic, strong) NSNumber *maxValue;
- /**
- * 最小值
- */
- @property (nonatomic, strong) NSNumber *minValue;
- /**
- * 左侧按钮的普通图片,高亮图片,不能点击时的图片
- */
- @property (nonatomic, strong) UIImage *leftNormalImage;
- @property (nonatomic, strong) UIImage *leftHighlightedImage;
- @property (nonatomic, strong) UIImage *leftDisableImage;
- /**
- * 右侧按钮的普通图片,高亮图片,不能点击时的图片
- */
- @property (nonatomic, strong) UIImage *rightNormalImage;
- @property (nonatomic, strong) UIImage *rightHighlightedImage;
- @property (nonatomic, strong) UIImage *rightDisableImage;
- /**
- * 当前值
- */
- @property (nonatomic, strong, readonly) NSNumber *currentValue;
- /**
- * 定制label
- *
- * @param block 中间的label
- */
- - (void)configCenterLabel:(RangeButtonCenterLabel)block;
- /**
- * 设置按钮的宽度(重置3个控件的frame值)
- */
- @property (nonatomic, assign) CGFloat buttonWidth;
- @end
- //
- // RangeButton.m
- // PulsingView
- //
- // Created by YouXianMing on 14/10/29.
- // Copyright (c) 2014年 YouXianMing. All rights reserved.
- //
- #import "RangeButton.h"
- @interface RangeButton ()
- @property (nonatomic, strong) UIButton *leftButton;
- @property (nonatomic, strong) UIButton *rightButton;
- @property (nonatomic, strong) UILabel *centerLabel;
- @property (nonatomic, strong) NSNumber *currentValue;
- @end
- @implementation RangeButton
- - (instancetype)initWithFrame:(CGRect)frame
- {
- self = [super initWithFrame:frame];
- if (self) {
- CGFloat width = frame.size.width / .f;
- CGFloat height = frame.size.height;
- // 左侧按钮
- _leftButton = [[UIButton alloc] initWithFrame:CGRectMake(, , width, height)];
- [_leftButton addTarget:self
- action:@selector(buttonsEvent:)
- forControlEvents:UIControlEventTouchUpInside];
- [self addSubview:_leftButton];
- // 中间Label
- _centerLabel = [[UILabel alloc] initWithFrame:CGRectMake(width, , width, height)];
- _centerLabel.textAlignment = NSTextAlignmentCenter;
- [self addSubview:_centerLabel];
- // 右侧按钮
- _rightButton = [[UIButton alloc] initWithFrame:CGRectMake(width * , , width, height)];
- [_rightButton addTarget:self
- action:@selector(buttonsEvent:)
- forControlEvents:UIControlEventTouchUpInside];
- [self addSubview:_rightButton];
- }
- return self;
- }
- - (void)buttonsEvent:(UIButton *)button {
- if (button == _leftButton) {
- if (_rightNormalImage) {
- [_rightButton setImage:_rightNormalImage forState:UIControlStateNormal];
- }
- if (_rightHighlightedImage) {
- [_rightButton setImage:_rightHighlightedImage forState:UIControlStateHighlighted];
- }
- // 临时获取值
- NSNumber *tmp = @([_currentValue intValue] - [_stepValue intValue]);
- // 减去的值小于或者等于最小值时
- if ([tmp intValue] < [_minValue intValue]) {
- } else {
- _currentValue = @([_currentValue intValue] - [_stepValue intValue]);
- _centerLabel.text = [NSString stringWithFormat:@"%d", [_currentValue intValue]];
- if ([_currentValue intValue] == [_minValue intValue]) {
- if (_leftDisableImage) {
- [_leftButton setImage:_leftDisableImage forState:UIControlStateNormal];
- [_leftButton setImage:_leftDisableImage forState:UIControlStateHighlighted];
- }
- }
- }
- } else {
- if (_leftNormalImage) {
- [_leftButton setImage:_leftNormalImage forState:UIControlStateNormal];
- }
- if (_leftHighlightedImage) {
- [_leftButton setImage:_leftHighlightedImage forState:UIControlStateHighlighted];
- }
- // 临时获取值
- NSNumber *tmp = @([_currentValue intValue] + [_stepValue intValue]);
- // 减去的值小于或者等于最小值时
- if ([tmp intValue] > [_maxValue intValue]) {
- } else {
- _currentValue = @([_currentValue intValue] + [_stepValue intValue]);
- _centerLabel.text = [NSString stringWithFormat:@"%d", [_currentValue intValue]];
- if ([_currentValue intValue] == [_maxValue intValue]) {
- if (_rightDisableImage) {
- [_rightButton setImage:_rightDisableImage forState:UIControlStateNormal];
- [_rightButton setImage:_rightDisableImage forState:UIControlStateHighlighted];
- }
- }
- }
- }
- }
- - (void)configCenterLabel:(RangeButtonCenterLabel)block {
- block(self.centerLabel);
- }
- #pragma mark - 重写各种setter,getter方法
- @synthesize startValue = _startValue;
- - (void)setStartValue:(NSNumber *)startValue {
- _startValue = startValue;
- _currentValue = _startValue;
- _centerLabel.text = [NSString stringWithFormat:@"%d", [startValue intValue]];
- }
- - (NSNumber *)startValue {
- return _startValue;
- }
- @synthesize rightNormalImage = _rightNormalImage;
- - (void)setRightNormalImage:(UIImage *)rightNormalImage {
- _rightNormalImage = rightNormalImage;
- [_rightButton setImage:_rightNormalImage forState:UIControlStateNormal];
- }
- - (UIImage *)rightNormalImage {
- return _rightNormalImage;
- }
- @synthesize rightHighlightedImage = _rightHighlightedImage;
- - (void)setRightHighlightedImage:(UIImage *)rightHighlightedImage {
- _rightHighlightedImage = rightHighlightedImage;
- [_rightButton setImage:rightHighlightedImage forState:UIControlStateHighlighted];
- }
- - (UIImage *)rightHighlightedImage {
- return _rightHighlightedImage;
- }
- @synthesize leftNormalImage = _leftNormalImage;
- - (void)setLeftNormalImage:(UIImage *)leftNormalImage {
- _leftNormalImage = leftNormalImage;
- [_leftButton setImage:leftNormalImage forState:UIControlStateNormal];
- }
- - (UIImage *)leftNormalImage {
- return _leftNormalImage;
- }
- @synthesize leftHighlightedImage = _leftHighlightedImage;
- - (void)setLeftHighlightedImage:(UIImage *)leftHighlightedImage {
- _leftHighlightedImage = leftHighlightedImage;
- [_leftButton setImage:leftHighlightedImage forState:UIControlStateHighlighted];
- }
- - (UIImage *)leftHighlightedImage {
- return _leftHighlightedImage;
- }
- @synthesize buttonWidth = _buttonWidth;
- - (void)setButtonWidth:(CGFloat)buttonWidth {
- _buttonWidth = buttonWidth;
- if (_buttonWidth > && _buttonWidth < self.frame.size.width / .f) {
- _leftButton.frame = CGRectMake(, , _buttonWidth, self.frame.size.height);
- _centerLabel.frame = CGRectMake(_buttonWidth, , self.frame.size.width - _buttonWidth*, self.frame.size.height);
- _rightButton.frame = CGRectMake(self.frame.size.width - _buttonWidth, , _buttonWidth, self.frame.size.height);
- }
- }
- - (CGFloat)buttonWidth {
- return _buttonWidth;
- }
- @end
实现的源码:
- //
- // ViewController.m
- // PulsingView
- //
- // Created by YouXianMing on 14/10/29.
- // Copyright (c) 2014年 YouXianMing. All rights reserved.
- //
- #import "ViewController.h"
- #import "RangeButton.h"
- @interface ViewController ()
- @end
- @implementation ViewController
- - (void)viewDidLoad {
- [super viewDidLoad];
- self.view.backgroundColor = [UIColor blackColor];
- RangeButton *rangeButton = [[RangeButton alloc] initWithFrame:CGRectMake(, , , )];
- rangeButton.maxValue = @;
- rangeButton.minValue = @;
- rangeButton.startValue = @;
- rangeButton.stepValue = @;
- rangeButton.rightNormalImage = [UIImage imageNamed:@"后_nor"];
- rangeButton.rightHighlightedImage = [UIImage imageNamed:@"后_high"];
- rangeButton.rightDisableImage = [UIImage imageNamed:@"后_dis"];
- rangeButton.leftNormalImage = [UIImage imageNamed:@"前_nor"];
- rangeButton.leftHighlightedImage = [UIImage imageNamed:@"前_high"];
- rangeButton.leftDisableImage = [UIImage imageNamed:@"前_dis"];
- rangeButton.buttonWidth = ;
- [rangeButton configCenterLabel:^(UILabel *label) {
- label.font = [UIFont fontWithName:@"HelveticaNeue-Thin" size:.f];
- label.textColor = [UIColor yellowColor];
- }];
- [self.view addSubview:rangeButton];
- }
- @end
重点需要注意的地方:
定制选择范围的按钮RangeButton的更多相关文章
- MFC选择文件(夹)按钮实现
MFC选择文件(夹)按钮实现 选择文件(夹) void CFileSelectDlg::OnBnClickedButtonSelect() { if(((CButton*)(GetDlgItem(ID ...
- 定制二选一按钮SwitchButton
定制二选一按钮SwitchButton 效果: 源码: SwitchButton.h 与 SwitchButton.m // // SwitchButton.h // KongJian // // C ...
- Java+Selenium 上传文件,点击选择“浏览文件”按钮,报错invalid argument
Java+Selenium 上传文件,点击选择"浏览文件"按钮,报错invalid argument 解决代码: Actions action=new Actions(driver ...
- Dynamics CRM定制子网格添加按钮实例之二:调试代码、打开Web资源及获取选择的记录
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复222或者20160501可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...
- Dynamics CRM定制子网格添加按钮实例之一
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复221或者20160430可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...
- ASPxGridView后台获取edit、delete、选择框等按钮。
GridViewCommandColumn commandColumn = (GridViewCommandColumn)ASPxGridViewInstance.Columns["#&qu ...
- 定制Android透明按钮
自己在学习和做例子的过程中,常常会需要按钮,由于系统自带按钮样式不太好看,所以需要我们自己来定制项目得按钮,我常常采用2中方法: 1.是制作9-patch的图片,这样能够匹配文字内容的长短. 2.是指 ...
- WebUploader 上传插件结合bootstrap的模态框使用时选择上传文件按钮无效问题的解决方法
由于种种原因(工作忙,要锻炼健身,要看书,要学习其他兴趣爱好,谈恋爱等),博客已经好久没有更新,为这个内心一直感觉很愧疚,今天开始决定继续更新博客,每周至少一篇,最多不限篇幅. 今天说一下,下午在工作 ...
- Flex4之皮肤定制
Flex4之皮肤定制[Skin类和Skin类] 博客分类: RIA-Flex4专栏 FlexAdobeUPFlashUI 第一.关于spark.skin.SparkSkin类的 1. ...
随机推荐
- python hbase util
from traceback import format_exc import phoenixdb as pb class Utils(object): def get_db_conn(self, u ...
- C# using用法
一.using指令 使用using指令在文件顶部引入命名空间,如 using System; using System.IO; 二.using别名 用using为命名空间或类型定义别名,当引入的多个命 ...
- angular 下载文件
后台直接返回文件即可,以wcf为例:读取目录文件返回,或直接生成文件并返回. public Stream GetCodeSn() { return File.OpenRead("e:\\工作 ...
- 怎样写SQL语句可以提高数据库的性能
1.首先要搞明白什么叫执行计划? 执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的,比如一条SQL语句如果用来从一个10万条记录的表中查1条记录 ...
- sgsdg
wrjow we wetwer werwer werwer werqw qweqwrq qwrqwr @ApiOperation("根据条件分页查询试卷") @ApiRespons ...
- org.springframework.web.context.ContextLoaderListener 解决办法
最近部署ssm项目在tomcat,tomcat启动的时候发出org.springframework.web.context.ContextLoaderListener 错误 严重: Error con ...
- 我用ASP.NET缓存之SQL数据缓存依赖(SqlCacheDependency)
[名词解释] 缓存(Cache)依赖,大白话解释就是缓存是否更新依赖于其它Object.那么SqlCacheDependency指的就是Cache的数据更新依赖于SQL Server数据库表的变化( ...
- IDEA 导出maven项目所有的依赖包到指定的目录
问题产生: 需要把一个maven工程调整结构,部署到一个新环境中,需要把依赖的jar包,单独打到一个目录中. 解决方案: 需要两步便可以copy到指定的目录中. 第一步: 找到maven projec ...
- fzu 2163
Problem 2163 多米诺骨牌 Accept: 17 Submit: 50Time Limit: 1000 mSec Memory Limit : 32768 KB Problem ...
- Mybatis之reflection包源代码解析(一)
一.序言 Mybatis作为ORM,实现了对象与关系数据库间的映射.Mybatis中的映射包含两个方面: 1.将对象中的值(parameterType所指定的对象)映射到具体的sql中,例如: & ...