任务需求样式:

思路:自定义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. redis未授权访问批量验证脚本编写[python]

    漏洞简介 简单来说,redis是一个数据库.在默认的配置下,redis绑定在0.0.0.0:6379,也就是说,如果服务器有公网ip,可以通过访问其公网ip的6379端口来操作redis.最为致命的是 ...

  2. Java基础——常用类之日期时间类

    如果有机会,请尝试Java8中全新的时间日期API!(参见Java8新特性随笔) 如果还是使用Java7及之前的版本,那么你可以尝试一些工具类(参考使用工具类相关的Hutool-DateUtil) 如 ...

  3. 小白用linode VPS搭建wordpress博客过程备忘 | Linode中文教程

    第一步:装debian系统 1.访问linode官方网站,查看http://library.linode.com/getting-started,我用的是debian系统,用putty登录,升级deb ...

  4. python基础学习1-网络爬虫程序中的代理IP设置

    #!/usr/bin/env python # -*- coding:utf-8 -*-网络爬虫代理 import urllib.request import random url="htt ...

  5. 5289: [Hnoi2018]排列

    5289: [Hnoi2018]排列 链接 分析: 首先将题意转化一下:每个点向a[i]连一条边,构成了一个以0为根节点的树,要求选一个拓扑序,点x是拓扑序中的第i个,那么价值是i*w[x].让价值最 ...

  6. Floodlight下发流表过程分析

    https://blog.csdn.net/vonzhoufz/article/details/32166445 当一个packet到达openflow交换机,会进行流表的匹配,如果没有找到相应的流表 ...

  7. asp.net core发布到docker报Microsoft.ApplicationInsights.AspNetCore miss的错误

    dotnet core 2.1的asp.net core在docker下部署的时候发生下面的错误. Error: An assembly specified in the application de ...

  8. Linux 技巧

    Linux Handbook For RedHat Enterprise Linux System System # clean old kernel packages package-cleanup ...

  9. Qt-网易云音乐界面实现-4 实现推荐列表和我的音乐列表,重要在QListWidget美化

    来标记下这次我么实现的部分 这次我们来是试下这部分功能,来对比一下,左边是原生,右面是我写的,按着模仿的海可以哈,就有有的资源不是一样了,因为我连抠图都懒得扣了了 好了,现在就是我的是先过程了,主要教 ...

  10. 在linux环境下为eclipse配置jdk以及Tomcat服务(附图解详细步骤)

    环境:jdk8,Tomcat7,eclipse 需要先在linux上安装好对应的软件及java环境,如果还没有安装的,可以先去看我之前写的两篇博客:ubuntu/linux中安装Tomcat(附图解详 ...