Есть ли способ переместить мое изображение с движением большого пальца ползунка? - PullRequest
0 голосов
/ 11 апреля 2011

Я хочу переместить свой просмотр изображений, когда пользователь перемещает большой палец UISlider, и представление изображений также должно иметь значение ползунка.У кого-нибудь есть идеи по этому поводу?Вот фрагменты кода:

   -(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);

}

1 Ответ

0 голосов
/ 11 апреля 2011

Каждый раз, когда вызывается 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);

теперь вы можете использовать ваши существующие экземпляры

...