Как получить центр большого пальца изображения UISlider - PullRequest
29 голосов
/ 11 ноября 2009

Я создаю пользовательский UISlider , чтобы проверить некоторые идеи интерфейса. В основном основано на увеличении изображения большого пальца.

Я узнал, как это сделать, вот так:

UIImage *thumb = [UIImage imageNamed:@"newThumbImage_64px.png"];  
[self.slider setThumbImage:thumb forState:UIControlStateNormal];  
[self.slider setThumbImage:thumb forState:UIControlStateHighlighted];  
[thumb release];  

Чтобы вычислить связанное значение, мне нужно знать, где центральная точка изображения большого пальца падает при манипуляциях с ним. И точка должна быть в координатах своего суперпредставления.

Глядя на документы UISlider , я не увидел ни одного свойства, которое бы отслеживало это.

Есть ли какой-нибудь простой способ рассчитать это или он может быть получен из каких-то существующих значений?

Ответы [ 11 ]

0 голосов
/ 08 апреля 2013

Приведенное выше решение полезно, когда UISlider находится в горизонтальном положении. В недавнем проекте нам нужно использовать UISlider с углом. Так что мне нужно получить как х, так и у позиции. Используя ниже, чтобы вычислить оси X, Y:

- (CGPoint)xyPositionFromSliderValue:(UISlider *)aSlider WithAngle:(double)aangle{
   //aangle means the dextrorotation angle compare to horizontal.
   float xOrigin = 0.0;
   float yOrigin = 0.0;
   float xValueToaXis=0.0;
   float yValueToaXis=0.0;
   float sliderRange = slider_width-aSlider.currentThumbImage.size.width;
   xOrigin = aSlider.frame.origin.x+slider_width*fabs(cos(aangle/180.0*M_PI));
   yOrigin = aSlider.frame.origin.y;

   xValueToaXis = xOrigin + ((((((aSlider.value-aSlider.minimumValue)/(aSlider.maximumValue-aSlider.minimumValue)) * sliderRange))+(aSlider.currentThumbImage.size.width / 2.0))*cos(aangle/180.0*M_PI)) ;
   yValueToaXis =  yOrigin + ((((((aSlider.value-aSlider.minimumValue)/(aSlider.maximumValue-aSlider.minimumValue)) * sliderRange))+(aSlider.currentThumbImage.size.width / 2.0))*sin(aangle/180.0*M_PI));

   CGPoint xyPoint=CGPointMake(xValueToaXis, yValueToaXis);
   return xyPoint;
}

Кроме того, могу ли я создать Ranger Slider на основе UISlider? Спасибо.

...