2015-01-28 2 views
1

В настоящее время я создаю пользовательский UISlider в Xcode. Я устанавливаю изображение большого пальца, мин. Изображение и максимальное изображение для слайдера. Все отлично работает. Дизайн требует, чтобы изображение большого пальца было прозрачным на фоне представления. Здесь возникает моя проблема, вы можете видеть, как обе стороны слайдера собираются вместе в середине большого пальца. Я не хочу, чтобы это выглядело так. Я хочу, чтобы ползунки останавливали край изображения большого пальца. Любые идеи относительно того, как я могу это сделать? Любые предложения приветствуются. Благодарю.Скрыть дорожку UISlider, когда за прозрачным изображением большого пальца

Это код, который я использую до сих пор.

UIImage *thumbImage = [UIImage imageNamed:@"thumb.png"]; 
UIImage *minImage = [UIImage imageNamed:@"min.png"]; 
UIImage *maxImage = [UIImage imageNamed:@"max.png"]; 

minImage = [minImage resizableImageWithCapInsets:UIEdgeInsetsMake(0,0,0,0)]; 
maxImage = [maxImage resizableImageWithCapInsets:UIEdgeInsetsMake(0,0,0,0)]; 

[_slider setMinimumTrackImage:minImage forState:UIControlStateNormal]; 
[_slider setMaximumTrackImage:maxImage forState:UIControlStateNormal]; 
[_slider setThumbImage:thumbImageforState:UIControlStateNormal]; 

Я не могу опубликовать изображение, потому что у меня недостаточно репутации. Я постараюсь объяснить немного лучше. У меня есть изображение Thumb, которое представляет собой круг. Центр круга прозрачен, и вы можете видеть прямо на фоновом изображении моего представления. Трек для слайдера продолжается до середины круга. Я бы предпочел, чтобы трек остановился на контуре круга. Надеюсь, это имеет смысл.

+0

Post image then Было бы лучше понять ...... – Spynet

ответ

0

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

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

В моем случае у меня есть ползунок, который установлен в 0, а его Макс установлен на ширину ползунка. Моя пользовательская дорожка слайдера появится только на правой стороне большого пальца. Таким образом, когда вы вставляете большой палец вправо, панель сжимается, а левая сторона становится четкой.

Сначала я настраиваю изображение слайдера и настраиваю слайдер для пустых изображений.

- (void)viewDidLoad { 
[super viewDidLoad]; 

UIImage *thumbImage =[UIImage imageNamed:@"answerSlider.png"]; 

[_slider setMinimumTrackImage:[UIImage new] forState:UIControlStateNormal]; 
[_slider setMaximumTrackImage:[UIImage new] forState:UIControlStateNormal]; 
[_slider setThumbImage:thumbImage forState:UIControlStateNormal]; 

thumbImage = nil; 

_slider.value = 0; 
} 

В ViewWillApear У меня есть вызов для настройки моей пользовательской дорожки SLider, которую я создам.

- (void)viewDidAppear:(BOOL)animated{ 
[self updateSlideBarLength]; 
} 

Внутри updateSLideBarLength Пользуюсь значение ползунка, чтобы помочь определить ширину моей дорожки ползунка изображения.

- (void)updateSlideBarLength{ 
// Get Position Of Slider 
CGFloat sliderValue = _slider.value; 
CGFloat thumbImageWidth = 58; // this is the width of my thumb image 
CGFloat sliderControlWidth = 288.0f; // This is a constant number in my case 
CGFloat sliderWidth = sliderControlWidth - thumbImageWidth - sliderValue; 

CGFloat sliderBarHeight = 2.0f; 

// Reset Width Of aFrame 
CGFloat sliderEndY = _sliderEnd.frame.origin.y; 
CGFloat sliderEndX = _sliderEnd.frame.origin.x; 

CGFloat sliderBarY = sliderEndY + (_sliderEnd.frame.size.height/2 - 1); 
CGFloat sliderBarX = sliderEndX - sliderWidth + (_sliderEnd.frame.size.width/2); 

CGRect aframe = CGRectMake(sliderBarX, sliderBarY, sliderWidth, sliderBarHeight); 

if (_sliderBar == nil) { 
    NSLog(@"Slider Bar Doesnt Exist"); 
    _sliderBar = [[UIImageView alloc] initWithFrame:aframe]; 
    _sliderBar.image = [UIImage imageNamed:@"sliderBar.png"]; 
    [self.view addSubview:_sliderBar]; 
    [self.view bringSubviewToFront:_sliderBar]; 
} 

_sliderBar.frame = aframe; 
} 

И наконец, я уверен, что updateSliderBarLength вызывается каждый раз, когда изменяется значение ползунка.

- (IBAction)sliderMoved:(id)sender { 
    [self updateSlideBarLength]; 
} 

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

1

я сделал что-то похожее на Шон Marraffa, хотя я нашел, что это легче подкласс UISlider и обновлять кадры моих взглядов изображения в thumbRectForBounds:trackRect:value используя что-то вроде этого:

var trackHeight: CGFloat = 2 

override func thumbRectForBounds(bounds: CGRect, trackRect rect: CGRect, value: Float) -> CGRect 
{ 
    let superValue = super.thumbRectForBounds(bounds, trackRect: rect, value: value) 
    let originY = (bounds.height-trackHeight)/2.0 
    minTrackImageView?.frame = CGRectMake(0, originY, superValue.minX, trackHeight) 
    maxTrackImageView?.frame = CGRectMake(superValue.maxX, originY, bounds.width-superValue.maxX, trackHeight) 
    return superValue 
} 

minTrackImageView и maxTrackImageView являются видом изображения я набор вверх в viewDidLoad.

Смежные вопросы