больший UISlider в порядке, но проблема с зоной отслеживания

StackOverflow https://stackoverflow.com/questions/1436021

  •  07-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

Спасибо

T.

Это было полезно?

Решение

Я полагаю, что вы, возможно, захотите взглянуть на thumbRectForBounds:trackRect:value:

Другие советы

Давняя проблема с управлением 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);
}

В Interface Builder настройте ползунок на использование вашего нового подкласса UISlider, и теперь у вас есть ползунок с осязаемой высотой 43 пикселя.

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

CGRect sliderFrame = self.mySlider.frame;    
sliderFrame.size.height = 142.0; 
[self.mySlider setFrame:sliderFrame];

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

- (void)viewDidLoad{
    [super viewDidLoad];

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

}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top