由一个滑动条的任务需求产生一个对UISlider控件的探讨
任务需求样式:
思路:自定义UISlider
动手吧, Boy!
@interface NoviceBidView : UIView
@property (nonatomic, strong) UIView *left;
@property (nonatomic, strong) UIView *right;
@property (nonatomic, strong) UISlider *slider;
@end
_slider = [[UISlider alloc] initWithFrame:CGRectMake(30.0, self.pieChart.center.y + 80 + 30 - 5, [[UIScreen mainScreen] bounds].size.width - 60.0, 45)];
[_slider setThumbImage:[self OriginImage:[UIImage imageNamed:@"icon_hand.png"] scaleToSize:CGSizeMake(50, 50)] forState:UIControlStateNormal];
_slider.minimumTrackTintColor = [UIColor clearColor];
_slider.maximumTrackTintColor = [UIColor clearColor];
[_slider addTarget:self action:@selector(sliderValueChanged:) forControlEvents:UIControlEventValueChanged];
[_slider addTarget:self action:@selector(sliderDragUp:) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:_slider];
- (void)sliderValueChanged:(UISlider *)slider
{
if (slider.value < 0.5) {
_left.frame = CGRectMake(40, self.pieChart.center.y + 80 + 30 - 15, (kScreenWidth - 80) * slider.value + 40, 40);
_right.frame = CGRectMake(40 + (kScreenWidth - 80) * slider.value, self.pieChart.center.y + 80 + 30 - 15, (kScreenWidth - 80) * (1 - slider.value), 40);
}else if(slider.value>0.9){
_left.frame = CGRectMake(40, self.pieChart.center.y + 80 + 30 - 15, (kScreenWidth - 80) * slider.value, 40);
_right.frame = CGRectMake((kScreenWidth - 80) * slider.value + 10, self.pieChart.center.y + 80 + 30 - 15, (kScreenWidth - 80) * (1 - slider.value) + 30, 40);
}else{
_left.frame = CGRectMake(40, self.pieChart.center.y + 80 + 30 - 15, (kScreenWidth - 80) * slider.value + 20, 40);
_right.frame = CGRectMake(20 + (kScreenWidth - 80) * slider.value, self.pieChart.center.y + 80 + 30 - 15, (kScreenWidth - 80) * (1 - slider.value) + 20, 40);
}
}
- (void)sliderDragUp:(UISlider *)slider
{
if (slider.value < 0.9) {
slider.value = 0;
}else
{
slider.value = 1;
[[NSNotificationCenter defaultCenter] postNotificationName:@"fastBit" object:nil];
[self performSelector:@selector(changeToZero) withObject:nil afterDelay:1];
}
_left.frame = CGRectMake(40, self.pieChart.center.y + 80 + 30 - 15, ([[UIScreen mainScreen] bounds].size.width-80.0) * slider.value, 40);
_right.frame = CGRectMake(40 + ([[UIScreen mainScreen] bounds].size.width-80.0) * slider.value, self.pieChart.center.y + 80 + 30 - 15, ([[UIScreen mainScreen] bounds].size.width-80.0) * (1 - slider.value), 40);
}
- (void)changeToZero
{
_slider.value = 0;
_left.frame = CGRectMake(40.0, self.pieChart.center.y + 80 + 55 - 5, 40, 45);
_right.frame = CGRectMake(40.0, self.pieChart.center.y + 80 + 55 - 5, [[UIScreen mainScreen] bounds].size.width - 80.0, 45);
}
-(UIImage*) OriginImage:(UIImage*)image scaleToSize:(CGSize)size//调整图片尺寸
{
UIGraphicsBeginImageContext(size);//size为CGSize类型,即你所需要的图片尺寸
[image drawInRect:CGRectMake(0,0, size.width, size.height)];
UIImage *scaledImage =UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return scaledImage;
}
上述方法和属性已经基本覆盖了UISlider的API中定义的常规使用方法了.
如果您觉得博文对您有帮助, 希望您能打发给博主一点茶水钱, 您的支持就是博主最大的动力!
由一个滑动条的任务需求产生一个对UISlider控件的探讨的更多相关文章
- 一个类似抖音 APP 拍摄按钮效果的控件
TouchButton 一个类似抖音 APP 拍摄按钮效果的控件 效果图预览 用法 <net.angrycode.library.TouchButton android:id="@+i ...
- CListCtrlEx:一个支持文件拖放和实时监视的列表控件——用未公开API函数实现Shell实时监视
一.需求无论何时,当你在Explorer窗口中创建.删除或重命名一个文件夹/文件,或者插入拔除移动存储器时,Windows总是能非常快速地更新它所有的视图.有时候我们的程序中也需要这样的功能,以便当用 ...
- android假设重写onDraw实现一个相似TextView能够显示表情和链接的控件(一)
先看效果图: 写一个超连接支持的对象: /**作为超连接显示的对象*/ public class LinkInfo implements Comparable<LinkInfo>{ pri ...
- C# Winform下一个热插拔的MIS/MRP/ERP框架(通用控件)
一直对商业控件不感冒, 结合日常工作, 我写了几个常用控件. 一.下拉框控件(仿Access下拉框:F4下拉,自动输入,支持单/多列显示),可在Datagridview中使用. 1.常规: 2.Dat ...
- WPF DataGrid控件中某一列根据另一个文本列的值显示相应的模板控件
之前做项目的时候需要实现这样一个功能.WPF DataGrid有两列,一列为"更新状态”列,一列为"值"列,如果"更新状态"列的值为“固定值更新”,则 ...
- 解决问题--VS2012中一个Panel覆盖另一个Panel时拖动时容易造成两个控件成父子关系的避免
在*.Designer.cs中,假如想把panel1覆盖到panel2上,但是VS自动让panel1成为panel2的子控件了,在文件中会有this.panel2.Controls.Add(this. ...
- WinForm----DataGridview---连接数据库,以及双击一条数据,显示信息到Label控件,也可以是TextBox控件。
最终效果: 代码: using System; using System.Collections.Generic; using System.ComponentModel; using System. ...
- 一个可爱 & 小清新的加载等待Android控件
https://github.com/Carson-Ho/Kawaii_LoadingView
- [android开发教程] 一个神奇的Demo 帮你掌握所有android控件
(本文内容来源:http://www.eoeandroid.com/thread-182392-1-1.html 转载请注明出处!) 2.jpg (23.78 KB, 下载次数: 0) 下载附件 ...
随机推荐
- C语言学习记录_2019.02.06
break语句的作用:当执行到break,则跳出循环,免去不必要的循环次数,节省时间和资源.-----跳出循环,结束循环: continue:跳过这一次循环剩下的语句,进入到下一轮循环.-----跳到 ...
- Golang设计模式—简单工厂模式(Simple Factory Pattern)
Golang设计模式--简单工厂模式 背景 假设我们在做一款小型翻译软件,软件可以将德语.英语.日语都翻译成目标中文,并显示在前端. 思路 我们会有三个具体的语言翻译结构体,或许以后还有更多,但现在分 ...
- Ajax第一天——入门与基本概念
什么是Ajax Ajax被认为是(Asynchronous JavaScript and XML的缩写).异步的js和xml 异步和同步:同步->类似打电话,接完一个再接下一个:异步:-> ...
- Openstack入门篇(十五)之如何创建生产使用的openstack镜像
在linux-node1节点上: [root@linux-node1 ~]# yum install -y openstack-nova-compute [root@linux-node1 ~]# y ...
- [原][osgearth]OE地形平整代码解读
在FlatteningLayer文件的createHeightField函数中:使用的github在2017年1月份的代码 if (!geoms.getComponents().empty()) { ...
- [NOI2007]货币兑换 cdq分治,斜率优化
[NOI2007]货币兑换 LG传送门 妥妥的\(n \log n\)cdq做法. 这题用cdq分治也可以\(n \log n\)但是在洛谷上竟然比一些优秀的splay跑得慢真是见了鬼了看来还是人丑常 ...
- SSISDB2:SSIS工程的操作实例
SSISDB 系列随笔汇总: SSISDB1:使用SSISDB管理Package SSISDB2:SSIS工程的操作实例 SSISDB3:Package的执行实例 SSISDB4:当前正在运行的Pac ...
- php 文件上传缩略图路径分析类
<?php //文件上传时分析路径信息 //author:songzhenghe 2014-1-24 //version 0.1 class path_ana { private $da ...
- 【Unity Shader】(六) ------ 复杂的光照(上)
笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题. [Unity Sha ...
- UNITY_资源路径与加载外部文件
UNITY_资源路径与加载外部文件 https://www.tuicool.com/articles/qMNnmm6https://blog.csdn.net/appppppen/article/de ...