большой UISlider в порядке, но проблема в зоне отслеживания - PullRequest
10 голосов
/ 17 сентября 2009

Моя цель - создать увеличенный UISlider с высотой 35 пикселей для большого пальца.

Я переклассифицировал UISlider и добавил метод:

- (CGRect)trackRectForBounds:(CGRect)bounds
{
    return CGRectMake(bounds.origin.x, bounds.origin.y, self.bounds.size.width, 50);
}

Затем я установил образ thum из моего контроллера, используя setThumbImage:

Мой большой палец хорошо виден.

Проблема, с которой я столкнулся, заключается в том, что зона отслеживания остается примерно такой же при высоте около 19 пикселей, как ее увеличить до 50?

Спасибо

Т. * * 1014

Ответы [ 4 ]

31 голосов
/ 01 июля 2010

Давняя проблема с элементом управления UISlider в iPhone OS состоит в том, что вы не можете сделать его выше. Точнее говоря, вы можете заставить его выглядеть выше, указав более высокие изображения для большого пальца и дорожки, но область касания остается крошечной 23 пикселя высотой.

Майкл Патрициос опубликовал способ , чтобы сделать ползунки по умолчанию намного проще, а вариант этого метода может работать с большими ползунками. Что вам нужно сделать, это подкласс UISlider и переопределить pointInside в вашем классе:

// How many extra touchable pixels you want above and below the 23px slider
#define SIZE_EXTENSION_Y 10

- (BOOL) pointInside:(CGPoint)point withEvent:(UIEvent*)event {
    CGRect bounds = self.bounds;
    bounds = CGRectInset(bounds, 0, SIZE_EXTENSION_Y);
    return CGRectContainsPoint(bounds, point);
}

В Интерфейсном Разработчике установите ползунок на использование вашего нового подкласса UISlider, и теперь у вас есть ползунок с сенсорной высотой 43px.

11 голосов
/ 31 мая 2012

Я использую это решение:)

CGRect sliderFrame = self.mySlider.frame;    
sliderFrame.size.height = 142.0; 
[self.mySlider setFrame:sliderFrame];
8 голосов
/ 23 июля 2013

Увеличьте область попадания большого пальца UISlider, увеличив высоту рамки UISlider. Этот подход позволяет избежать любого смещения и последующей необходимости корректировать рамку ползунка.

- (void)viewDidLoad{
    [super viewDidLoad];

    //expand slider hit area
    self.slider.frame = CGRectInset(self.slider.frame, 0, -10);

}
0 голосов
/ 30 апреля 2010

Я считаю, что вы можете посмотреть на thumbRectForBounds:trackRect:value:

...