定制选择范围的按钮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. ...
随机推荐
- java的PreparedStatement中使用like时的问题
SQL:select * from students where name like '%tommy%'; 正常的sql如上,是可以直接执行的, 那放到java的P热怕热的Statement中就应该是 ...
- 01 JDBC的问题
jdbc编程步骤: 1. 加载.注册数据库驱动 DriverManager 2. 创建并获取数据库链接 Connection 3. 创建jdbc statement/preparedState ...
- CentOS SVN Failed to load JavaHL Library
在CentOS 6上的eclipse安装了svbclipse插件后,svn不能使用,并且第一次使用的时候还出现下面错误窗口提示 Failed to load JavaHL Library. These ...
- ABP实战--项目结构
学习完毕With ASP.NET Core & Entity Framework Core Part-1及Part-2后,只实现了基本的功能,使用该工程继续学习ABP的更多功能. 更改项目结构 ...
- 原生JavaScript 导出excel表格(兼容ie和其他主流浏览器)
因同事的需求是想前端导出excel表格,网上找了一些demo,自己修改了一下,可能以后会用到,记录下来吧,兼容ie和一些主流浏览器,ie可能会报错,原因参考 这里,edge 浏览器还没有办法导出,正在 ...
- 匿名函数、闭包、lambda表达式、Block
C#有lambda.匿名函数,js有匿名函数.闭包,OC中有block,看到这是不是心中有一万个草泥马在跑,不过它们这些都是换汤不换药,不同语言名字不一样. 从功能性上说lambda和closure( ...
- SQL Server操作结果集-并集 差集 交集 结果集排序
操作结果集 为了配合测试,特地建了两个表,并且添加了一些测试数据,其中重复记录为东吴的人物. 表:Person_1魏国人物 表:Person_2蜀国人物 A.Union形成并集 Union可以对两个或 ...
- APICloud APP前端框架——手机APP开发、APP制作、APP定制平台
概述 APICloud前端框架,包括api.js和api.css.api.css处理不同平台浏览器的默认样式.api.js是一个JavaScript库.是APICloud为混合移动开发定制的轻量Jav ...
- 以中间件,路由,跨进程事件的姿势使用WebSocket--Node.js篇
上一篇文章介绍了在浏览器端以中间件,路由,跨进程事件的姿势使用原生WebSocket.这篇文章将介绍如何使用Node.js以相同的编程模式来实现WebSocket服务端. Node.js中比较流行的两 ...
- 新手之首次部署阿里云centos7+mysql+asp.net mvc core应用之需要注意的地方
先来几个字,坑坑坑. 自己业余爱好者,签名一直捣鼓net+mssql,前阵买了阿里云esc,自己尝试做个博客,大体架子都打好了,本地安装了mysql,测试了也没问题. 部署到阿里云centos7,结果 ...