Iphone UISlider minimumValueImageRectForBounds:和super maximumValueImageRectForBounds返回空矩形
我将Iphone UISlider minimumValueImageRectForBounds:和super maximumValueImageRectForBounds返回空矩形,iphone,objective-c,ios,cocoa-touch,uislider,Iphone,Objective C,Ios,Cocoa Touch,Uislider,我将UISlider子类化,以使拇指变小,并希望覆盖minimumValueImageRectForBounds和maximumValueImageForBounds以使其宽度减小2px。所以我的代码是 - (CGRect)minimumValueImageRectForBounds:(CGRect)bounds { CGRect stdRect = [super minimumValueImageRectForBounds:bounds]; return CGRectMake(
UISlider
子类化,以使拇指变小,并希望覆盖minimumValueImageRectForBounds
和maximumValueImageForBounds
以使其宽度减小2px。所以我的代码是
- (CGRect)minimumValueImageRectForBounds:(CGRect)bounds
{
CGRect stdRect = [super minimumValueImageRectForBounds:bounds];
return CGRectMake(stdRect.origin.x + 2, stdRect.origin.y, stdRect.size.width - 2, stdRect.size.height);
}
关键是stdRect是空矩形(0,0,0,0)
更糟的是,如果我显式地设置一个这样的矩形
- (CGRect)minimumValueImageRectForBounds:(CGRect)bounds
{
return CGRectMake(2, 0, 40, 8);
}
它根本不影响最小值图像位置
有什么想法吗?不要这样做。这是一个旧的,不正确的答案,由过去的我。我讨厌那个家伙 --
一般来说,您可能不想将Apple标准UI控件划分为子类。您可能想要构建它并自己设置这些属性(不确定它们是否可设置,但似乎应该设置) 哈哈,我刚想出来。我读得不够仔细 设置
minimumValueImage
与调用setMinimumTrackImage:forState:
不同。minimumValueImage
是一个显示在滑块左侧的图像,与滑块中发生的事情无关。覆盖minimumValueImageRectForBounds
会更改此图像的尺寸(默认尺寸为0pt宽),因此滑块框的宽度会减小并向右移动。据我所知,没有办法修改minimumTrackImage的矩形(例如使其延伸到拇指图像的右侧);只能更改图像
我还没有真正理解允许您设置最小值image
的意义。看起来您可以通过更改滑块的大小并在滑块的侧面添加单独的UIImageView来完成相同的任务。谁知道呢
请注意,我在这里所说的一切都以同样的方式适用于
maximumValueImage
和setMaximumTrackImage:forState
方法。这很奇怪。因为如果我愿意的话,这是苹果公司对子类说的四种方法中的两种。“如果您想自定义绘制最小值图像的矩形,可以重写此方法并返回不同的矩形。”是的,您当然可以这样做,但如果有可以手动设置的属性,我想您会发现这通常是一个更简单的路径。也许我应该用“在使用Apple UI元素时,更喜欢代码配置而不是子类化”来表达我的观点。-对于这里的不清楚,我深表歉意。虽然我完全不同意我过去2012年的观点,但我将把这个答案留在这里,作为我讨厌重写历史的证据。(看到我在那里做了什么吗,未来的自我?)我也看到了这一点。我想补充一点,看起来最小值图像的rect几乎是thumb图像所在位置的函数,如果覆盖thumbRectForBounds
,它会变得更加明显。