2011-04-11 36 views
0

我想移動我的imageview作爲用戶滑動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

每次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); 
現在

您可以使用現有的情況下

+0

我做相同的,但現在的問題是,它越來越顯示整個像路徑跟蹤不會看不到的相同圖像。 – Ashutosh 2011-04-11 19:07:38

+0

請發佈您的代碼比我可以幫助 我會說,你重新創建和添加你的UIImageViews每次你改變值 – Seega 2011-04-11 19:12:03

+0

檢查編輯... – Ashutosh 2011-04-11 19:23:46

相關問題