2012-05-23 52 views
2

我有一个要求,我必须移动UISlider标签的价值。我试着用这个代码用UISlider移动标签

[slider addTarget:self action:@selector(dragMoving:withEvent:) forControlEvents: UIControlEventTouchDragInside]; 

- (void)dragMoving:(UIControl *)c withEvent:ev { 
    UITouch *touch = [[ev allTouches] anyObject]; 
    CGPoint touchPoint = [touch locationInView:self.view]; 
    sliderLabe.frame = CGRectMake(touchPoint.x,250, 270, 40); 
} 

为sliderLabel只是滑块下方,但它给我奇怪的结果,当我拖到快,但如果我慢慢移动滑块万亩它工作正常。

+0

你心里有什么样的_strange result_的:

当然触摸位置,因此它需要从滑块的其他属性计算是不是在这个方法知道的? –

+0

如果我把它拖得很快,滑块就会移到一边,但标签会卡在某处。 – IOSCODER

+2

这可能是因为滑块在移动时也会调用'valueChanged'。也许你应该在那里放置你的标签移动代码(如果'slider.continuous'设置为YES)。尽管你不会在那里有直接的“触摸”位置。你必须从滑块的'origin.x','width','minimumValue','maximumValue'和'value'来计算它。这只是一个想法,不确定,如果表现实际上会改善。 –

回答

3

滑动条正在移动时,它也在计算它的新值,并调用valueChanged。这可能会干扰您的额外UIControlEventTouchDragInside处理程序。

如果slider.continuous设置为YES您可以尝试将标签移动代码移动到valueChanged处理程序中。 frame.origin.xframe.size.widthminimumValuemaximumValuevalue