iOS 使用ScrollView自定义Slider

首先说下为什么要自定义Slider

UISlider系统提供的方法:

- (void)setThumbImage:(UIImage *)image forState:(UIControlState)state;

- (void)setMinimumTrackImage:(UIImage *)image forState:(UIControlState)state;

- (void)setMaximumTrackImage:(UIImage *)image forState:(UIControlState)state;

只能更改3种背景图片。如果设计要做成这样...基本就可以放弃使用UISlider了

自定义Slider

基本思路

创建UIimageView  * linBgImageView        slide未被选中的背景 

创建UIView          * linView                       slide选中的背景 

创建UIImageView * linBgPointImageView  slide上面的刻度

创建UIImageView * touchImageView         slide上面拖动的点

实现touchesEnded方法比较麻烦,代码如下:

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ NSInteger allLenght = linBgImageView.frame.size.width; NSInteger originX = linBgImageView.frame.origin.x+3; NSInteger unitLenght = (allLenght/12); //7个等级分成12份 //逻辑 //    if (touchX <= originX + unitLenght) {  //等级0 //        touchX = originX + unitLenght * 0; //    } //    else if (touchX <= originX + unitLenght * 3)//等级1 //    { //        touchX = originX+unitLenght * 2; //    } //    else if (touchX <= originX + unitLenght * 5)//等级1 //    { //        touchX = originX+unitLenght * 4; //    } for (int i = 0; i < 7; i++) { NSInteger level = (i*2+1); if (touchX <= originX + unitLenght * level)//等级1 { touchX = originX + unitLenght * (level-1); touchImageView.center = CGPointMake(touchX, linBgImageView.center.y); [self setvalueLineview]; nowLevel = (((long)level-1)/2)+1; nowLevelImageView.alpha = 1; [self performSelectorInBackground:@selector(levelAction) withObject:nil]; return; } } } - (void)setvalueLineview { linView.frame = CGRectMake(linBgImageView.frame.origin.x, linBgImageView.frame.origin.y, touchImageView.center.x-linBgImageView.frame.origin.x, 3); linView.center = CGPointMake(linView.center.x, linBgImageView.center.y); }

我又重新整理下代码,可能会有一些不同的地方。但是主要逻辑是一样的。

代码地址:github:https://github.com/YBYHunter/YUSlider (如果喜欢star下,谢谢)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏iOS开发攻城狮的集散地

iOS 音乐播放器之锁屏歌词+歌词解析+锁屏效果

2516
来自专栏岑志军的专栏

对UILabel添加UIMenuController扩展

17210
来自专栏coding...

iOS开发实战-上架AppStore 通过内购和广告获得收益写在前面效果分析代码部分补充Demo地址

忽然发现手头上也没什么独立App,那就随便写个放到AppStore上吧,凑个数吧。哈哈哈。

912
来自专栏陈满iOS

iOS·宏封装线程锁小技巧

621
来自专栏iOS技术

iOS多线程应用(三):NSOperation

NSOperation是基于GCD的面向对象封装,在各大开源库里面我们常常看到它的身影。它的使用很简单易懂,基本上你点进Api就会用了,本文就最常用的功能进行讲...

30811
来自专栏编程之旅

iOS开发——UINavigationBar中踩过的坑

自从升级了Xcode8,以及在做iOS10的适配工作中,我发现在NavigationBar这个控件中,有了一个小小的坑。

953
来自专栏青玉伏案

iOS开发之自定义表情键盘(组件封装与自动布局)

  下面的东西是编写自定义的表情键盘,话不多说,开门见山吧!下面主要用到的知识有MVC, iOS开发中的自动布局,自定义组件的封装与使用,Block回调,Cor...

20810
来自专栏猿人谷

1.注册或登录页面设计:UILabel,UIButton,UITextField

学习iOS开发已经有一段时日了,之前一直没有系统的对iOS开发的相关知识进行归纳总结,导致很多知识点云里雾里在脑子里形不成iOS开发的思想,现将自己在学习过程...

1965
来自专栏一“技”之长

iOS开发封装一个可以响应超链接的label——基于RCLabel的交互扩展

        iOS系统是一个十分注重用户体验的系统,在iOS系统中,用户交互的方案也十分多,然而要在label中的某部分字体中添加交互行为确实不容易的,如果...

571
来自专栏视频咖

100行代码搞定短视频App,终于可以和美女合唱了

最近某音最近又带了一波合唱的节奏,老板看到后果然又是要尽快跟进,希望隔壁公司加薪的时候他也能作出如此反应

1812

扫码关注云+社区