我现在正在使用 Objective-C 在 iOS 中实现一个功能,即当 slider 值发生变化时,在 slider 的“节点”上方制作一个文本标签。文本标签文本是 slider 的当前值。
所以,我在 Storyboard View Controller 上添加了 UILabel。
@property (strong, nonatomic) IBOutlet UILabel *tempoSliderLabel;
在slider onchange函数中,计算sliderNodePosition后,
[self.tempoSliderLabel setText:[NSString stringWithFormat"%ld", sliderTempoValue]];
[self.tempoSliderLabel setCenter: CGPointMake(slideNodePosition.x, slideNodePosition.y - 10.0)];
但是,我不知道为什么标签有时会回到 Storyboard中的原始位置。在测试过程中看起来像“闪烁”:
然后,我再次尝试删除 setText,标签按预期“移动”。
那么,如何防止 setText 重置标签位置?
Best Answer-推荐答案 strong>
IBOutlet 的 lblValue 和它的 x 约束,如
IBOutlet UILabel * lblValue;
IBOutlet NSLayoutConstraint *sliderValueXconstraints;
slider 的IBAction
-(IBAction)sliderActionUISlider*)slider
{
float x = [self xPositionFromSliderValue:slider];
sliderValueXconstraints.constant=x;
lblValue.text = [NSString stringWithFormat"%f", slider.value];
}
- (float)xPositionFromSliderValueUISlider *)aSlider
{
float sliderRange = aSlider.frame.size.width - aSlider.currentThumbImage.size.width;
float sliderOrigin = aSlider.frame.origin.x + (aSlider.currentThumbImage.size.width / 2.0);
float sliderValueToPixels = (((aSlider.value - aSlider.minimumValue)/(aSlider.maximumValue - aSlider.minimumValue)) * sliderRange) + sliderOrigin;
return sliderValueToPixels;
}
输出
关于调用 setText 时,iOS UILabel 位置被重置,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/35913544/
|