如何在iOS中将Degree转换为极坐标

时间:2013-12-21 05:15:03

标签: ios objective-c

我在UILabel画一个圆圈。我为圆圈设定了起始度和结束度。现在我想将imageview添加到这个圆形标签,即Imageview的极坐标与cirle的结束程度相匹配。所以,我想将圆的最终度转换为极坐标。例如:

Width of UILabel = 62
Height of UILabe = 62
Start degree of cirle in UILabel  = 0 (degree)
End degree of cirle in UILabel  = 150 (degree)

我将UIImageView(pointImgView)添加到此UILabel中,如下所示

  UIImageView *pointImgView = [[UIImageView alloc] initWithFrame:CGRectMake(x, y, 6, 6)];
 [self addSubview:pointImgView];

我不知道如何将End of cirle(150度)转换为pointImgView的极坐标。

请给我一些建议。非常感谢

4 个答案:

答案 0 :(得分:3)

使用这些宏。

#define kDCControlDegreesToRadians(x) (M_PI * (x) / 180.0)
#define kDCControlRadiansToDegrees(x) ((x) * 180.0 / M_PI)

代码标准说明:如果您在整个应用中使用此计算,请使用此宏。如果你在一个地方使用它,最好使用这个逻辑在viewcontroller中编写一个方法。

已更新:

我的建议:不要使用图片视图,请使用图片my backgroundColor = [UIColor colorWithPatternImage:]填充标签颜色,然后在下面的代码中围绕标签绘制圆圈。 使用下面的代码绘制start角度的圆圈。

- (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGRect boundsRect = self.bounds;
    float x = boundsRect.size.width / 2;
    float y = boundsRect.size.height / 2;
    boundsRect.size.width -= 5;
    boundsRect.size.height -= 5;

    CGContextSaveGState(context);
    CGContextSetLineWidth(context, self.valueArcWidth);
    [self.trackingColor set];
    // Drawing code
    CGFloat valueAdjusted = (self.value - self.minimumValue) / (self.maximumValue - self.minimumValue);
    CGContextAddArc(context,
                    x,
                    y,
                    boundsRect.size.width / 2 -2,
                    kDCControlDegreesToRadians(self.arcStartAngle ,
                    kDCControlDegreesToRadians(self.arcStartAngle + (360 * valueAdjusted),
                    0);
    CGContextStrokePath(context);
    CGContextRestoreGState(context);
}

此处MinimumValue = 10.0maximum value = 11.0,您的值必须介于(10 -11)之间。这会将您的值转换为0.0到1.0并将其添加到10.0。 注意:我提供代码,根据您的方案进行编辑。

答案 1 :(得分:1)

只需定义一个宏,如:

#define DEGREES_RADIANS(angle) ((angle) / 180.0 * M_PI)

改变你的方法,如:

CATransform3D transform = CATransform3DMakeRotation(DEGREES_RADIANS(360), 0, 0, 1)

答案 2 :(得分:1)

使用以下方法进行转换

#include <math.h>               // M_PI

float RadiantoDegree(float radian)
{
    return ((radian / M_PI) * 180.0f);
}

float DegreetoRadian(float degree)
{
    return ((degree / 180.0f) * M_PI);
}

答案 3 :(得分:0)

使用以下公式

radian = degree*M_PI/180

您的角度位于degree,输出位于radian。您可以为此定义函数或宏。