Подтвердить что ты не робот

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

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

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

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

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

Мой большой палец хорошо отображается.

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

Спасибо

Т.

4b9b3361

Ответ 1

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

Ответ 2

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

Майкл Патриций опубликовал способ, чтобы сделать слайдеры по умолчанию намного проще, и вариация этой техники может обрабатывать большие слайдеры. Что вам нужно сделать, это подкласс 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, и теперь у вас есть слайдер с высотой 43px.

Ответ 3

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

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

Ответ 4

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

- (void)viewDidLoad{
    [super viewDidLoad];

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

}