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

时间:2014-01-23 16:22:55

标签: ios iphone uislider

我正试图在UISlider中将拇指放在拇指上方的另一个UIView。为此,我需要拇指图像的宽度。在iOS6中,这很好用。我可以用:

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

但是拇指最终没有。

是否可以读取默认滑块拇指图像的大小?或者我必须找到它,设定一个常数,以及Apple如何在以后不改变它?

5 个答案:

答案 0 :(得分:6)

currentThumbImage财产上的文档说:

  

如果没有使用设置自定义拇指图像   setThumbImage:forState:方法,此属性包含值nil。   在这种情况下,接收器使用默认的拇指图像   图。

thumbImageForState:上的文档不太清楚:

  

返回值与指定状态或相关联的拇指图像   如果无法检索到合适的图像,则为零。

我认为你可能想弄清楚默认的拇指大小。如何安装看起来与系统映像完全相同的“自定义”拇指图像?这将解决苹果公司将其从你身下改掉的问题。

答案 1 :(得分:6)

我在我的子类中使用它:

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

答案 2 :(得分:0)

您需要使用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);

}

答案 3 :(得分:0)

如果布局流程尚未完成,我相信这有时会返回0。我遇到了一些麻烦。

#left
{
    width: 200px;
    /*min-height: 100%px;*/ % before px? really?
    background: blue;
    overflow: hidden;
    height: 100px;
    float: left;
}

#right
{
    width: 800px;
    background: cyan;
    height: 100px;
    float: right;
}

答案 4 :(得分:0)

这是另一个有效的,但它有点" hackier"而不是第一个,并在默认拇指上做出假设图像宽度在未来版本的iOS(过去11)中不会发生变化

- (CGFloat)thumbImageWidth // default thumb image is 30 px,
{
    double imgThumbImageWidth = self.currentThumbImage.size.width;
    if (imgThumbImageWidth && imgThumbImageWidth != 0 && imgThumbImageWidth != thumbImageWidth) {
        thumbImageWidth = imgThumbImageWidth;
    }
    else if (!thumbImageWidth || thumbImageWidth == 0) { // No custom image set, use 30
        thumbImageWidth = 31;
    }
    return thumbImageWidth;
}