11
votes

Uilabel sur uislider thumb

Comment puis-je mettre un Uilabel sur le pouce de Uislider ... de sorte que lorsque je déplace le pouce ... Uilabel bougera également .... Comme il est sur le pouce ...

aucune idée ??


0 commentaires

7 Réponses :


5
votes

Le "bouton" n'est pas disponible par API public, de sorte que de mauvaises chances de l'accrocher - si em> c'est une sous-vision du tout et non seulement dessinées directement.

Vous devriez donc ajouter Vous étiquetez à la même vue que le curseur (assurez-vous de l'ajouter plus tard pour que sur em> it). Vous pouvez ensuite écouter les événements de changement de valeur et placer votre étiquette en conséquence. C'est une mise à l'échelle linéaire entre les points d'extrémité dont vous avez besoin pour comprendre au début, mais cela ne devrait pas être trop difficile. P>

Modifier avec le code: STRY> P>

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)];
}


0 commentaires

-2
votes

0 commentaires

30
votes

Essayez ceci

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);
}


2 commentaires

+1 Il définit l'étiquette mobile en haut de la vue. Vous pouvez ajuster lbl.center.y pour la position personnalisée ..


Merci pour votre réponse, cette ligne doit être: yourlabel.center = cgpointMake (thumbrrect.origin.x + self.slider.frame.origin.x + yourlabel.frame.size.width / 2.f, auto.slider.frame .origin.y - 20); bien que



0
votes

Il suffit d'ajouter une vue d'image sur le pouce du curseur Ajouter une étiquette sur ImageView XXX

}


0 commentaires

1
votes

même réponse avec SWIFT3 : xxx


0 commentaires

1
votes
extension UIImage {
    class func imageWithLabel(_ label: UILabel) -> UIImage {
        UIGraphicsBeginImageContextWithOptions(label.bounds.size, false, 0)
        defer { UIGraphicsEndImageContext() }
        label.layer.render(in: UIGraphicsGetCurrentContext()!)
        return UIGraphicsGetImageFromCurrentImageContext() ?? UIImage()
    }
}

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UITextFieldDelegate, UITextViewDelegate, UIPickerViewDelegate, UIPickerViewDataSource, UIScrollViewDelegate
{

    func maskRoundedImage(image: UIImage, radius: CGFloat) -> UIImage {
           let imageView: UIImageView = UIImageView(image: image)
           let layer = imageView.layer
           layer.masksToBounds = true
           layer.cornerRadius = radius
           UIGraphicsBeginImageContext(imageView.bounds.size)
           layer.render(in: UIGraphicsGetCurrentContext()!)
           let roundedImage = UIGraphicsGetImageFromCurrentImageContext()
           UIGraphicsEndImageContext()
           return roundedImage!
    }
    
    override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()

            let label = UILabel(frame: CGRect(x: 0, y: 0, width: 28, height: 28))
            label.backgroundColor = .black
            label.textAlignment = .center
            label.font =  label.font.withSize(12)
            label.text = String(Int(round( backlightSlider.value * 100 )))
            label.textColor = .white
            var image = UIImage.imageWithLabel(label)
            image = maskRoundedImage(image: image, radius: 14.0)
            backlightSlider.setThumbImage(image, for: .normal)
}

1 commentaires

Merci d'avoir contribué, mais la prochaine fois peut-être ajouter un petit texte.



0
votes

Si quelqu'un cherche une réponse à Swift, jetez un coup d'œil à ma réponse ici: - Mettez l'étiquette sur Uslider Thumb

Ça va fonctionner comme un charme :)


0 commentaires