我想在用户滑动UISlider的拇指时移动我的imageview,图像视图也应该具有滑块的值。有没有人对此有任何想法?这是代码片段:
-(void)addSliderX:frame andminimumValue:(int)min andmaximumValue:(int)max andSliderValue:(int)value{
CGRect frame1 = CGRectFromString(frame);
statSlider = [[UISlider alloc]initWithFrame:frame1];
[statSlider setMinimumTrackImage:[[UIImage imageNamed:@"greenSlider.png"] stretchableImageWithLeftCapWidth:10.0 topCapHeight:10.0] forState:UIControlStateNormal];
[statSlider setThumbImage:[UIImage imageNamed:@"sliderBar_greenThumb.png"] forState:UIControlStateNormal];
[statSlider setMinimumValue:min];
[statSlider setMaximumValue:max];
statSlider.continuous = YES;
[statSlider addTarget:self action:@selector(valueChanged:) forControlEvents:UIControlEventValueChanged];
[statSlider addTarget:self action:@selector(sliderChanged:) forControlEvents:UIControlEventTouchUpInside];
//bubbleViewController = [[SFNDoorBubbleViewController alloc]initWithNibName:@"SFNDoorBubbleViewController"bundle:[NSBundle mainBundle]];
//popoverController = [[UIPopoverController alloc] initWithContentViewController:bubbleViewController];
//[popoverController setPopoverContentSize:bubbleViewController.view.frame.size];
[self.view addSubview:statSlider];
}
-(void)valueChanged:(id)sender{
UISlider *localSlider = (UISlider *)sender;
bubble = [[UIView alloc]init];
back = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"sliderBar_handle_number.png"]];
greenSliderValue = [[NSString alloc] initWithString:[NSString stringWithFormat:@"%3.0f", [localSlider value]]];
UILabel * val = [[UILabel alloc]init];
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;
}
[self.view addSubview:bubble];
[bubble addSubview:back];
[bubble addSubview:val];
bubble.frame = CGRectMake(xCoord, 500, bubbleViewController.view.frame.size.width, bubbleViewController.view.frame.size.height);
}
答案 0 :(得分:0)
每次调用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];
现在删除所有分配,因为我们想重用现有的视图。我们知道他们的标签 的(无效)的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);
现在您可以使用现有实例