UILabel Over UISlider Большой палец - PullRequest
       0

UILabel Over UISlider Большой палец

9 голосов
/ 18 августа 2010

Как я могу положить UILabel на большой палец UISlider ... чтобы при перемещении большого пальца .... UILabel также будет двигаться ... как на большом пальце ...

Есть идеи ??

Ответы [ 5 ]

29 голосов
/ 26 сентября 2012

Попробуйте это

yourLabel = [[UILabel alloc]initWithFrame:....];

//Call this method on Slider value change event

-(void)sliderValueChanged{
    CGRect trackRect = [self.slider trackRectForBounds:self.slider.bounds];
    CGRect thumbRect = [self.slider thumbRectForBounds:self.slider.bounds
                               trackRect:trackRect
                                   value:self.slider.value];

    yourLabel.center = CGPointMake(thumbRect.origin.x + self.slider.frame.origin.x,  self.slider.frame.origin.y - 20);
}

Я мог бы получить наиболее точное значение, используя этот фрагмент.

5 голосов
/ 18 августа 2010

«Ручка» недоступна для общедоступного API, поэтому плохие шансы для ее подключения - , если , это вообще подпредставление, а не просто нарисованное напрямую.

Так что выВы должны добавить ярлык к тому же представлению, что и ползунок (убедитесь, что вы добавили его позже, чтобы он отображался над ).Затем вы можете прослушать события изменения значения и соответственно разместить свою метку.Сначала необходимо вычислить линейное масштабирование между конечными точками, но это не должно быть слишком сложным.

Редактирование с кодом:

yourLabel = [[UILabel alloc]initWithFrame:....];
// .. configure label
[[yourSlider superview] addSubview:yourLabel];
[yourSlider addTarget:self action:@selector(adjustLabelForSlider:) forControlEvents:UIControlEventValueChanged];


-(void)adjustLabelForSlider:(id)slider
{
    float value = slider.value;
    float min = slider.minimumValue;
    float max = slider.maximumValue;

    CGFloat newX = ...; // Calculate based on yourSlider.frame and value, min, and max
    CGFloat newY = ...;

    [yourLabel setCenter:CGPointMake(newX,newY)];
}

Примечание: непроверенный код; -)

1 голос
/ 31 мая 2016

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

- (IBAction)valueChangedSlider:(id)sender {
handleView = [_slider.subviews lastObject];
label = [[UILabel alloc] initWithFrame:handleView.bounds];
label = (UILabel*)[handleView viewWithTag:1000];

if (label==nil) {

    label = [[UILabel alloc] initWithFrame:handleView.bounds];

    label.tag = 1000;

    [label setFont:[UIFont systemFontOfSize:12]];
    label.textColor = [UIColor redColor];
    label.backgroundColor = [UIColor clearColor];

    label.textAlignment = NSTextAlignmentCenter;

    [handleView addSubview:label];


}
label.text = [NSString stringWithFormat:@"%0.2f", self.slider.value];

}

0 голосов
/ 04 декабря 2017

Тот же ответ с swift3 :

    let trackRect: CGRect  = slider.trackRect(forBounds: slider.bounds)
    let thumbRect: CGRect  = slider.thumbRect(forBounds: slider.bounds , trackRect: trackRect, value: slider.value)
    let x = thumbRect.origin.x + slider.frame.origin.x
    let y = slider.frame.origin.y - 20
    sliderLabel.center = CGPoint(x: x, y: y)
0 голосов
/ 18 августа 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...