任务需求样式:

思路:自定义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控件的探讨的更多相关文章

  1. 一个类似抖音 APP 拍摄按钮效果的控件

    TouchButton 一个类似抖音 APP 拍摄按钮效果的控件 效果图预览 用法 <net.angrycode.library.TouchButton android:id="@+i ...

  2. CListCtrlEx:一个支持文件拖放和实时监视的列表控件——用未公开API函数实现Shell实时监视

    一.需求无论何时,当你在Explorer窗口中创建.删除或重命名一个文件夹/文件,或者插入拔除移动存储器时,Windows总是能非常快速地更新它所有的视图.有时候我们的程序中也需要这样的功能,以便当用 ...

  3. android假设重写onDraw实现一个相似TextView能够显示表情和链接的控件(一)

    先看效果图: 写一个超连接支持的对象: /**作为超连接显示的对象*/ public class LinkInfo implements Comparable<LinkInfo>{ pri ...

  4. C# Winform下一个热插拔的MIS/MRP/ERP框架(通用控件)

    一直对商业控件不感冒, 结合日常工作, 我写了几个常用控件. 一.下拉框控件(仿Access下拉框:F4下拉,自动输入,支持单/多列显示),可在Datagridview中使用. 1.常规: 2.Dat ...

  5. WPF DataGrid控件中某一列根据另一个文本列的值显示相应的模板控件

    之前做项目的时候需要实现这样一个功能.WPF DataGrid有两列,一列为"更新状态”列,一列为"值"列,如果"更新状态"列的值为“固定值更新”,则 ...

  6. 解决问题--VS2012中一个Panel覆盖另一个Panel时拖动时容易造成两个控件成父子关系的避免

    在*.Designer.cs中,假如想把panel1覆盖到panel2上,但是VS自动让panel1成为panel2的子控件了,在文件中会有this.panel2.Controls.Add(this. ...

  7. WinForm----DataGridview---连接数据库,以及双击一条数据,显示信息到Label控件,也可以是TextBox控件。

    最终效果: 代码: using System; using System.Collections.Generic; using System.ComponentModel; using System. ...

  8. 一个可爱 & 小清新的加载等待Android控件

    https://github.com/Carson-Ho/Kawaii_LoadingView

  9. [android开发教程] 一个神奇的Demo 帮你掌握所有android控件

    (本文内容来源:http://www.eoeandroid.com/thread-182392-1-1.html  转载请注明出处!) 2.jpg (23.78 KB, 下载次数: 0) 下载附件   ...

随机推荐

  1. Mongodb 常用语法

    以下语法为在控制台使用的.假定有集合(相当于关系型数据库的库)qyxxcx,文档(相当于表)qyxx,jyzcjzs show dbs use qyxxcx db show collections d ...

  2. spark练习——影评案例

    第一次写博客,新人上路,欢迎大家多多指教!!! ---------------------------------------------------------------------分割线---- ...

  3. FPGA之CORDIC算法实现_理论篇(上)

    关于cordic的算法原理核心思想就是规定好旋转角度,然后通过不停迭代逐步逼近的思想来实现数学求解,网上关于这部分的资料非常多,主要可以参考: 1)https://blog.csdn.net/qq_3 ...

  4. 12 stark组件之pop,按钮,url,页面

    1.Window open() 方法 http://www.runoob.com/jsref/met-win-open.html 效果图   2.admin的pop添加按钮 3.stark之pop功能 ...

  5. Wannafly挑战赛5 D. 子序列

    D. 子序列 链接 #include<cstdio> #include<algorithm> #include<cstring> #include<iostr ...

  6. 对大表进行全表更新,导致 Replication 同步数据的过程十分缓慢

    在Publisher database中更新一个big table,数据行数是3.4亿多.由于没有更新 clustered Index key,因此,只产生了3.4亿多个Update Commands ...

  7. Security2:角色和权限

    权限的授予分为三部分:权限(Permission),安全对象(Securable)和安全主体(Principal),这三个术语之间的关系是:Grant Permission on Securable ...

  8. Jenkins服务器维护

    Jenkins服务器维护 以下是一些基本的活动,一些是对 Jenkins 服务器维护的最佳实践 URL选项 在 Jenkins 实例 URL 有以下命令将开展对Jenkins实例的相关动作. http ...

  9. Python 循环的技巧

    当在字典中循环时,用 items() 方法可将关键字和对应的值同时取出 >>> knights = {'gallahad': 'the pure', 'robin': 'the br ...

  10. Flash导出安卓端apk

    最近外甥女在学校做了一个演示视频,基于flash做的,希望小舅给她导出成可以运行在pc/android端的可执行程序.看了下过程还是蛮复杂的,还只能一天时间.重新照葫芦画瓢做一款是来不及了,由于以前基 ...