我在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的极坐标。
请给我一些建议。非常感谢
答案 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.0
和maximum 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
。您可以为此定义函数或宏。