Проблемы с предварительной загрузкой UISlider на iPhone и закругленными краями - PullRequest
3 голосов
/ 28 декабря 2011

Я пытаюсь реализовать пользовательский 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), я отчетливо вижу «левые кадры» по бокам, к сожалению, я не уверен, как с этим справиться :)

    Изображения слайдера: enter image description here enter image description here enter image description here

    Проблема:

    Bad Slider edges

  2. Я вижу обычный UISlider (синий и серебристый) в течение пары секунд, и только тогда загружается пользовательская графика или когда я фактически перемещаю ползунок.Я не уверен, почему это происходит .. РЕДАКТИРОВАТЬ: Это происходит только в симуляторе, теперь работает нормально.

Заранее спасибо за любыепомощь :)Шай.

Ответы [ 2 ]

2 голосов
/ 12 сентября 2012

У меня просто была очень похожая проблема. Оказалось, что размер (ширина х высота) ползунка, который я добавил в конструкторе интерфейса, не соответствовал размерам изображений, которые я использовал для настройки ползунка. Как только я заставил их совпадать, эти «остатки» на концах ползунка исчезли.

2 голосов
/ 28 декабря 2011

Вам не нужно создавать подкласс UISlider для достижения этого эффекта, и если бы вы это сделали, вы бы точно не установили изображения дорожек в методе drawRect. drawRect должен содержать только код рисования, он вызывается всякий раз, когда любая часть элемента управления нуждается в перерисовке.

Установите изображения большого пальца и дорожки в отдельном методе, либо в вашем подклассе (вызываемом из initWithFrame и initWithCoder), либо в объекте, который создает ползунок в первую очередь. Это нужно сделать только один раз, когда слайдер создается впервые. Не переопределяйте drawRect.

Вам также не нужно вызывать awakeFromNib вручную, если у вас там тоже нет определенного кода? Это было бы обычным местом для установки пользовательских изображений в подклассе, если вы когда-либо использовали слайдер из IB.

Проблема заключается в том, что край квадрата изображения дорожки имеет квадратную форму, поэтому он отображается вокруг большого пальца. Сделайте оба конца изображения дорожки закругленными, с растягиваемой областью в 1 пиксель посередине, например:

enter image description here

...