【问题标题】:iPhone Custom UISlider preload and rounded edges issuesiPhone 自定义 UISlider 预加载和圆角边缘问题
【发布时间】:2011-12-28 12:51:21
【问题描述】:


我正在尝试实现一个自定义 UISlider,我使用一个名为 UISliderCustom 的类对其进行了扩展,该类具有以下代码:

@implementation UISliderCustom

- (id)initWithCoder:(NSCoder *)aDecoder{
    if(self == [super initWithCoder:aDecoder]){
        self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, 200, 13);

        UIImage *slideMin = [[UIImage imageNamed:@"slideMinimum.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 5, 0, 0)];
        UIImage *slideMax = [[UIImage imageNamed:@"slideMaximum.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 5, 0, 0)];

        [self setThumbImage:[UIImage imageNamed:@"slideThumb.png"] forState:UIControlStateNormal];
        [self setThumbImage:[UIImage imageNamed:@"slideThumb.png"] forState:UIControlStateHighlighted];

        [self setMinimumTrackImage:slideMin forState:UIControlStateNormal];
        [self setMaximumTrackImage:slideMax forState:UIControlStateNormal];
    }

    return self;
}    

@end

我遇到了两个小问题

  1. 当我将滑块滑到其中一个边缘时(进度 = 0.0 / 进度 = 1.0),我可以清楚地看到侧面的“剩余部分”,我不知道如何处理它,不幸的是 :)

    滑块图片:

    问题:

  2. 我看到常规 UISlider(蓝色和银色)几秒钟,然后才加载自定义图形,或者当我实际移动滑块时。我不确定为什么会这样。 编辑:这只发生在模拟器中,现在可以正常工作了。

提前感谢您的帮助:)
谢。

【问题讨论】:

  • 只是一个小提示——显然第一个问题(加载延迟)只发生在模拟器中,所以我的主要问题是第二个。

标签: ios custom-controls uislider visual-glitch


【解决方案1】:

你不需要继承 UISlider 来实现这个效果,如果你这样做了,你肯定不会在 drawRect 方法中设置轨道图像。 drawRect 应该只包含绘图代码,每当控件的任何部分需要重绘时都会调用它。

在您的子类中(从 initWithFrame 和 initWithCoder 调用)或在最初创建滑块的对象中,在单独的方法中设置缩略图和跟踪图像。这只需要在第一次创建滑块时执行一次。不要覆盖drawRect。

您也不需要手动调用 awakeFromNib,除非您也有一些特定的代码?如果您只使用过 IB 的滑块,那将是在子类中设置自定义图像的常见位置。

对于方形末端,问题在于轨迹图像的最边缘是方形的,因此它显示在拇指周围。将轨迹图的两端做圆角,中间有一个1px的可拉伸区域,像这样:

【讨论】:

  • 感谢您的信息,但无论如何它都不能解决我的问题,它只是一个最佳实践答案(我很高兴学习),但它不能解决我不确定的奇怪边缘问题为什么会发生。
  • 我不确定边缘问题是否是您覆盖 drawRect 的结果。您可以在问题中包含您的曲目图片吗?
  • 顺便说一句,当将此代码移动到我的initWithFrame: 时,由于某种原因它不起作用...
  • 滑块是在笔尖中还是在代码中添加?如果它在一个笔尖,你需要我在答案中提到的 initWithCoder。
  • 我有一种感觉,因为所有的来源都是 PNG,但我需要透明度,所以我不能真正使用任何其他来源......
【解决方案2】:

我自己也遇到了非常相似的问题。事实证明,我在界面生成器中添加的滑块大小(宽度 x 高度)与我用于自定义滑块的图像大小不匹配。一旦我让它们匹配,滑块末端的那些“剩菜”就消失了。

【讨论】:

    猜你喜欢
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    • 2011-11-07
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多