如何阅读UISlider拇指图像的大小

问题描述:

我想在UISlider的拇指上方定位一个额外的UIView。要做到这一点,我需要拇指图像的宽度。在iOS6中,这工作正常。我可以使用:如何阅读UISlider拇指图像的大小

CGFloat thumbWidth = self.navSlider.currentThumbImage.size.width; 

(如图这样的回答:How to get the center of the thumb image of UISlider

这iOS7返回0.0F。我也尝试使用它阅读它:

UIImage *thumb = [self.navSlider thumbImageForState:UIControlStateNormal]; 

但拇指结果为零。

是否可以读取默认滑块图像的大小?或者我会不得不找到它,设置一个常数,以及苹果以后如何改变它?

currentThumbImage属性的文件说:

如果没有自定义图像的拇指已经使用 setThumbImage设置:forState:方法,这个属性包含值为零。 在这种情况下,接收者使用 绘图的默认拇指图像。

thumbImageForState:的文档是不太清楚:

返回值与指定的状态,或 零相关联,如果适当的图像不能被检索的拇指图像。

我想你可能会运气不佳,试图找出默认的拇指大小。如何安装一个“自定义”的拇指图像,看起来完全像系统图像?这将解决苹果从你身边改变它的问题。

+1

我希望这样做没有自定义图像,但我想这可能是唯一的出路。至少它在跨操作系统看起来是一致的。谢谢! –

您需要使用setThumbImage forState设置初始缩略图。这适用于我在iOS7中正常工作,并返回图像的正确宽度。滑块设置在故事板中并通过IBOutlet连接。

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [self.slider setThumbImage:[UIImage imageNamed:@"tick.jpg"] forState:UIControlStateNormal]; 

    float check = self.slider.currentThumbImage.size.width; 
    NSLog(@"Check is %f", check); 

} 
+0

我希望能够在不为滑块提供自定义图像的情况下做到这一点。这可能是通过这种方式得以实现的唯一方法。 –

我在子类中使用:

CGRect trackRect = [self trackRectForBounds:self.bounds]; 
CGRect thumbRect = [self thumbRectForBounds:self.bounds trackRect:trackRect value:0]; 
CGSize thumbSize = thumbRect.size; 
+1

智能答案。然而,我们仍然可以获得没有子类的大小或大拇指的直径: 'var trackRect = slider.trackRectForBounds(slider.bounds) var thumbRect = slider.thumbRectForBounds(slider.bounds,trackRect:trackRect,value:slider .value) ' 使用'slider?.superview.convertRect(thumbRect,fromView:slider)'在superview的坐标中使用它。 – bubuxu

+0

太棒了! –