存档

文章标签 ‘UISlider’

定制UISlider

2011年1月13日 没有评论

刚刚向App Store提交了一个小应用,做了一个模拟来电的界面,里面用UISlider实现了slide to answer。

搜索slide to unlock,可以找到不少实现的代码,比如在这里提到的SlideToCancel。我做的就是基于这个代码。

直接运行这个代码,会发现可以看到UISlider的滑轨(track)。可以通过setMinimumTrackImage / setMaximumTrackImage来修改。但这里如果把nil作为参数,并不是表示不显示,而是使用缺省的。可以用一个透明的图片传给这两个函数,就“隐藏”track了。

随着滑块向右滑动,下面的slide to cancel会逐渐消隐,这是通过设置label的alpha实现的。当滑动到中间的某个位置时,手离开屏幕,滑块就会回到左侧,但这个代码里忘记了将label的alpha设置为1。可以在sliderUp中添加一个设置alpha为1的animation。

这个代码还有个问题,就是当滑动到中间的时候手指一动到UISlider之外再离开,滑块就不会回到最左侧。解决办法也很简单,把touch up outside同样指向sliderUp就可以了。

这个代码是用代码生成UISlider,但如果使用IB的话,是不能调整slider的高度,会造成即使thumb很大,可以拖拽的区域还是很小。要解决这个问题,需要自己继承UISlider,实现pointInside:

– (BOOL) pointInside:(CGPoint)point withEvent:(UIEvent*)event {
CGRect bounds = self.bounds;
bounds = CGRectInset(bounds, 0, (23.0-SIZE_Y)/2);
return CGRectContainsPoint(bounds, point);
}

UISlider的缺省高度是23,通过CGRectInset调整到SIZE_Y大小。

另外,对于slide to cancel几个字符的处理,这里是按照字节拆分的,不能用在中文上。如果使用一个图片叠加在字符上,通过设置图片的alpha来实现search light效果,就不会收文字编码限制了,即使是后面是图片也没有问题。

分类: iOS 标签: