UISlider 获取滑块上方坐标&解决滑块两边空隙

 

  • 获取滑块上方坐标:

   

比如infoView是上面要显示的坐标,scrubberSliderUISlider

    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

   

   infoxy

    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);

}

猜你喜欢

转载自justsee.iteye.com/blog/2334889
今日推荐