Objective c UISlider拇指上的UILabel
如何将UILabel放置在UISlider的拇指上…这样当我移动拇指时…UILabel也会移动…因为它位于拇指上 有什么想法吗?这个“旋钮”在公共API中是不可用的,所以连接它的机会很小-如果它是一个子视图而不是直接绘制的话 因此,您应该将标签添加到与滑块相同的视图中(确保稍后添加标签,使其显示在其上方)。然后,您可以侦听值更改事件,并相应地放置标签。首先,您需要了解端点之间的线性缩放,但这应该不会太困难 使用代码编辑:Objective c UISlider拇指上的UILabel,objective-c,Objective C,如何将UILabel放置在UISlider的拇指上…这样当我移动拇指时…UILabel也会移动…因为它位于拇指上 有什么想法吗?这个“旋钮”在公共API中是不可用的,所以连接它的机会很小-如果它是一个子视图而不是直接绘制的话 因此,您应该将标签添加到与滑块相同的视图中(确保稍后添加标签,使其显示在其上方)。然后,您可以侦听值更改事件,并相应地放置标签。首先,您需要了解端点之间的线性缩放,但这应该不会太困难 使用代码编辑: yourLabel = [[UILabel alloc]initWithF
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)];
}
注:未测试代码;-) 这可能非常有帮助。。。 试试这个
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);
}
我可以通过使用这个片段获得最准确的值 只需在滑块的拇指上添加imageview即可在imageview上添加标签
- (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];
}与迅捷3的答案相同:
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)
+1在视图顶部设置移动标签。您可以为自定义位置调整lbl.center.y。谢谢您的回答,此行必须是:yourlab.center=CGPointMake(thumbRect.origin.x+self.slider.frame.origin.x+yourlab.frame.size.width/2.f,self.slider.frame.origin.y-20);谢谢你的贡献,但下次可能会添加一些文字。
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)
}