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 ... P>
aucune idée ?? p>
7 Réponses :
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)];
}
Cela pourrait être très utile ... Comment obtenir le centre de l'image du pouce de Uislider p>
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);
}
+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
Il suffit d'ajouter une vue d'image sur le pouce du curseur Ajouter une étiquette sur ImageView } P> P>
même réponse avec
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)
}
Merci d'avoir contribué, mais la prochaine fois peut-être ajouter un petit texte.
Si quelqu'un cherche une réponse à Swift, jetez un coup d'œil à ma réponse ici: - Mettez l'étiquette sur Uslider Thumb a > p>
Ça va fonctionner comme un charme :) p>