何时加载和设置 min/maxTrackImages 以便它们出现在 IB 中
Posted
技术标签:
【中文标题】何时加载和设置 min/maxTrackImages 以便它们出现在 IB 中【英文标题】:When to load and set the min/maxTrackImages so that they appear in the IB 【发布时间】:2015-03-04 19:45:02 【问题描述】:我在 UISlider 的子类中有以下代码。我想加载图像并让它们出现在界面构建器中。
- (void)prepareForInterfaceBuilder
[self sharedInit];
- (void)sharedInit
UIImage *minImage = [[UIImage imageNamed:@"MinSliderImage"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 1, 0, 0)];
UIImage *maxImage = [[UIImage imageNamed:@"MaxSliderImage"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 1)];
UIImage *thumbImage = [UIImage imageNamed:@"SliderThumb"];
[self setMinimumTrackImage:minImage forState:UIControlStateNormal];
[self setMaximumTrackImage:maxImage forState:UIControlStateNormal];
[self setThumbImage:thumbImage forState:UIControlStateNormal];
应用程序运行时看起来正确,但图像未显示在 IB 上。
可以通过创建 IBInspectable Image 属性并加载相同的图像来实现所需的效果。让我相信我在错误的时间加载图像。
- (void)setMinimumTrackImage:(UIImage *)minImage
UIImage *img = [minImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, 1, 0, 0)];
[self setMinimumTrackImage:img forState:UIControlStateNormal];
- (void)setMaximumTrackImage:(UIImage *)maxImage
UIImage *img = [maxImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 1)];
[self setMaximumTrackImage:img forState:UIControlStateNormal];
- (void)setCurrentThumbImage:(UIImage *)thumbImage
[self setThumbImage:thumbImage forState:UIControlStateNormal];
所以我的问题是。如何对图像进行硬编码、设置 min/maxTrackImages 并仍然让它们显示在 IB 上?
【问题讨论】:
您在prepareForInterfaceBuilder
中设置这些图像有什么原因吗?这样做意味着它们只会在 Interface Builder 中应用,而不是在您的应用实际运行时应用......
函数sharedInit在initWithFrame和initWithCoder中也有调用。如前所述,但我把它删掉了,因为我认为它不相关。正如使用 top 方法所提到的,滑块在模拟器中正确渲染,但在界面构建器中不正确。
【参考方案1】:
您可以尝试将IB_DESIGNABLE
放在 .h 文件中的类声明之前。这将告诉 Interface Builder 在情节提要中呈现您的 UISlider,使其在您运行应用程序时出现。
IB_DESIGNABLE
@interface YourCostumeSlider : UISlider
【讨论】:
我已经有了 IB_DESIGNABLE 属性。问题是图像在 sharedInit 中加载为零,即使我使用主包加载它也是如此。以上是关于何时加载和设置 min/maxTrackImages 以便它们出现在 IB 中的主要内容,如果未能解决你的问题,请参考以下文章