1

我有一个UIView包含自定义的类UISlider。当它UIView被添加到 viewController 时,它使用随机旋转

newSlider.transform = CGAffineTransformRotate(newSlider.transform, degreesToRadians(random));

现在我想要做的是动画从UISlider滑块末端飞出的拇指图像。我面临的问题是获取滑块开始/结束的坐标,以便我可以计算出拇指图像的移动方式。

我试过使用trackRectForBounds,但它给了我完全相同的坐标,不管旋转应用于UIView

我在UIView课堂上尝试过这些:

CGRect trackRect = [customSlider trackRectForBounds:customSlider.bounds];

CGRect trackRect2 = [customSlider trackRectForBounds:self.window.bounds];

无论旋转如何,它都会给我 {{2, 1}, {288, 50}} 和 {{2, 215}, {316, 50}}。我认为它给了我来自UIView而不是屏幕的矩形。

4

1 回答 1

2

获取滑块的端点可以这样完成:

在此处输入图像描述

CGFloat rotation = [[newSlider.layer valueForKeyPath:@"transform.rotation.z"] floatValue];

CGFloat halfWidth = newSlider.bounds.size.width/2;
CGPoint sliderCenter = newSlider.center;
sliderCenter.y += newSlider.bounds.size.height/2; //this shouldn't be needed but it seems it is

CGFloat x1 = sliderCenter.x - halfWidth * cos(rotation);
CGFloat x2 = sliderCenter.x + halfWidth * cos(rotation);

CGFloat y1 = sliderCenter.y - halfWidth * sin(rotation);
CGFloat y2 = sliderCenter.y + halfWidth * sin(rotation);

CGPoint T1 = CGPointMake(x1, y1);
CGPoint T2 = CGPointMake(x2, y2);
于 2012-06-08T12:20:33.107 回答