Каждый раз, когда вызывается changedValue:
, вы создаете новый UIView, UIImageView и UILabel.
Вместо редактирования старых экземпляров.Это приводит к тому, что все старые UIViews создают «путь».
В вашем viewDidLoad вы можете создать эти три представления и установить для каждого из них .tag property
viewDidLoad
UIView* bubble = [[UIView alloc]init];
UIImageView* back = [[UIImageView alloc]initWithImage:[UIImageimageNamed:@"sliderBar_handle_number.png"]];
UILabel * val = [[UILabel alloc]init]
//other configurations ...
bubble.tag = 1;
back.tag = 2;
val.tag = 3;
[self.view addSubview:bubble];
[bubble addSubview:back];
[bubble addSubview:val];
Теперь удалите все выделения, потому что мы хотим повторно использовать существующие представления.И мы знаем их теги.
(void) valueChanged: (id) отправитель
UISlider *localSlider = (UISlider *)sender;
NSString* greenSliderValue = [[NSString alloc] initWithString:[NSString stringWithFormat:@"%3.0f", [localSlider value]]];
UIView *bubble = (UIView*)[self.view.subviews viewWithTag:1];
UIImageView *back = (UIImageView*)[bubble.subviews viewWithTag:2];
UILabel *val = (UILabelw*)[bubble.subviews viewWithTag:3];
dsp =[greenSliderValue floatValue];
val.text = greenSliderValue;
[bubbleViewController updateSliderValueTo:dsp];
CGFloat sliderMax = localSlider.maximumValue;
CGFloat sliderMin = localSlider.minimumValue;
CGFloat sliderMaxMinDiff = sliderMax - sliderMin;
CGFloat sliderValue = dsp;
if(sliderMin < 0.0) {
sliderValue = dsp-sliderMin;
sliderMax = sliderMax - sliderMin;
sliderMin = 0.0;
sliderMaxMinDiff = sliderMax - sliderMin;
}
CGFloat xCoord = ((sliderValue-sliderMin)/sliderMaxMinDiff)*[localSlider frame].size.width-bubbleViewController.view.frame.size.width/2.0;
CGFloat halfMax = (sliderMax+sliderMin)/2.0;
if(sliderValue > halfMax) {
sliderValue = (sliderValue - halfMax)+(sliderMin*1.0);
sliderValue = sliderValue/halfMax;
sliderValue = sliderValue*11.0;
xCoord = xCoord - sliderValue;
}
else if(sliderValue < halfMax) {
sliderValue = (halfMax - sliderValue)+(sliderMin*1.0);
sliderValue = sliderValue/halfMax;
sliderValue = sliderValue*11.0;
xCoord = xCoord + sliderValue;
}
bubble.frame = CGRectMake(xCoord, 500, bubbleViewController.view.frame.size.width, bubbleViewController.view.frame.size.height);
теперь вы можете использовать ваши существующие экземпляры