IOS:重写UISlider大小解决UISlider滑动不灵敏的问题
网上有很多写关于重写UISlider,解决滑动不灵敏的问题。
然后又设计很多样式,吧啦吧啦一堆的。
我感觉都没提到一个概念,有的人学习可能恰好知道了,一下子过去了不在意。有的人不了解的估计得卡半天了。
我们理解的重写就是覆盖掉原先的值或者方法,新的生效,原来的不生效。UISlider这样理解就有问题了
//-------------------------------------------------------------------------------------------------------
我们直接initwithframe的时候给H,无论给多少,发现显式还是一条细线。
_playSlider =[[Slider alloc]initWithFrame:CGRectMake(60, screenHeight-50, screenWidth-120, 30)];;
估计有很多人重写,直接这样
- (CGRect)trackRectForBounds:(CGRect)bounds { return CGRectMake(60, screenHeight-50, screenWidth-120, 30);
}
结果发现还是不行。并且会出其它问题
正确的理解应该是,UISlider或许由多个View组成(没看过专业文档啥的,有错误指出,这里仅供理解),init时候创建的区域大小代表这个UISlider控件的大小,但它不代表其中能滑动的区域大小。
上面假如重写中的值是以self.view为基准,这样的x,y,w,h是有问题的。
应该把初始化initwithframe的区域大小当作父控件,重写的时候把重写的区域当作子控件,xywh以初始化时候的值区域为标准。或者说是initwithframe是UISlider的区域,你重写的才是滑动的区域大小
所以应该是这样的
@interface Slider () @end @implementation Slider - (CGRect)trackRectForBounds:(CGRect)bounds { return CGRectMake(0, 0,bounds.size.width, 30); }
@end
_playSlider =[[Slider alloc]initWithFrame:CGRectMake(60, screenHeight-50, screenWidth-120, 30)];;
记住你重写是相当于以initwithframe的区域为父类,所以x,y,w,h都不要超值了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端