- 获取滑块上方坐标:
比如infoView是上面要显示的坐标,scrubberSlider是UISlider:
self.infoView.hidden = NO;
CGRect trackRect = [self.scrubberSlider convertRect:self.scrubberSlider.bounds toView:nil];//可能scrubberSlider嵌套,求出scrubberSlider在最外层(infoView父层)的frame
CGRect thumbRect = [self.scrubberSlider thumbRectForBounds:self.scrubberSlider.bounds trackRect:trackRect value:self.scrubberSlider.value];//得到滑块在最外层(infoView父层)的frame
求info的x,y
CGRect rect = self.infoView.frame;
[self.infoView sizeToFit];
rect.origin.x = (thumbRect.origin.x) - ceilf(CGRectGetWidth(self.infoView.frame) / 2) + 16;
rect.origin.y = self.boundsHeight - 80;
self.infoView.frame = rect;
- UISlider两边有空隙的解决方法:
重写UISlider的这个方法:改变滑块的触摸范围
- (CGRect)thumbRectForBounds:(CGRect)bounds trackRect:(CGRect)rect value:(float)value
{//返回滑块大小
rect.origin.x = rect.origin.x - 10 ;
rect.size.width = rect.size.width +20;
return CGRectInset ([super thumbRectForBounds:bounds trackRect:rect value:value], 10 , 10);
}
当然UISlider还有这么几个方法可以重写:
// 控制slider的宽和高,这个方法才是真正的改变slider滑道的高的
-(CGRect)trackRectForBounds:(CGRect)bounds
{//返回滑道大小
bounds.origin.x=15;
bounds.origin.y=bounds.size.height/3;
bounds.size.height=bounds.size.height/5;
bounds.size.width=bounds.size.width-30;
return bounds;
}
- (CGRect)minimumValueImageRectForBounds:(CGRect)bounds
{//返回左边图片
return CGRectMake(0, 0, CGRectGetWidth(self.frame), CGRectGetHeight(self.frame));
}
- (CGRect)maximumValueImageRectForBounds:(CGRect)bounds
{//返回右边图片
return CGRectMake(0, 0, CGRectGetWidth(self.frame)/ 2, CGRectGetHeight(self.frame) / 2);
}