我是iphone的初学者。我希望将圆除以相等的部分。我有代码,
#import "MyView.h"
#define PI 3.14159265358979323846
static inline float radians(double degrees) { return degrees * PI / 180; }
@implementation MyView
- (id)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
// Initialization code
}
return self;
}
- (void)drawRect:(CGRect)rect {
// circle
CGContextRef contextRef = UIGraphicsGetCurrentContext();
CGContextSetRGBFillColor(contextRef, 0, 0, 255, 0.1);
CGContextSetRGBStrokeColor(contextRef, 0, 0, 255, 0.5);
// Draw a circle (filled)
//CGContextFillEllipseInRect(contextRef, CGRectMake(100, 100, 150, 150));
// Draw a circle (border only)
CGContextStrokeEllipseInRect(contextRef, CGRectMake(100, 100, 150, 150));
//cgr
CGContextRef c5= UIGraphicsGetCurrentContext();
//CGFloat red4[4] = {1.0f, 0.0f, 0.0f, 1.0f};
CGContextSetLineWidth(c5, 2.0);
CGContextSetStrokeColorWithColor(c5, [UIColor brownColor].CGColor);
CGContextBeginPath(c5);
//CGContextMoveToPoint(c5, 101.0f, 156.0f);
CGContextMoveToPoint(c5, 175.0f, 175.0f);
CGContextAddLineToPoint(c5, 100.0f, 175.0f);
CGContextStrokePath(c5);
CGContextRef c6= UIGraphicsGetCurrentContext();
//CGFloat red4[4] = {1.0f, 0.0f, 0.0f, 1.0f};
CGContextSetLineWidth(c6, 2.0);
CGContextSetStrokeColorWithColor(c6, [UIColor blueColor].CGColor);
CGContextBeginPath(c6);
CGContextMoveToPoint(c6, 175.0f, 175.0f);
CGContextAddLineToPoint(c6, 175.0f, 250.0f);
//CGContextAddLineToPoint(c6, 175.0f, 245.0f);
CGContextStrokePath(c6);
CGContextRef c7= UIGraphicsGetCurrentContext();
//CGFloat red4[4] = {1.0f, 0.0f, 0.0f, 1.0f};
CGContextSetLineWidth(c7, 02.0);
CGContextSetStrokeColorWithColor(c7, [UIColor greenColor].CGColor);
CGContextBeginPath(c7);
CGContextMoveToPoint(c7, 175.0f, 175.0f);
CGContextAddLineToPoint(c7, 175.0f, 100.0f);
CGContextStrokePath(c7);
CGContextRef c8= UIGraphicsGetCurrentContext();
//CGFloat red4[4] = {1.0f, 0.0f, 0.0f, 1.0f};
CGContextSetLineWidth(c8, 2.0);
CGContextSetStrokeColorWithColor(c8, [UIColor redColor].CGColor);
CGContextBeginPath(c8);
//CGContextMoveToPoint(c5, 101.0f, 156.0f);
CGContextMoveToPoint(c8, 175.0f, 175.0f);
CGContextAddLineToPoint(c8, 250.0f, 175.0f);
CGContextStrokePath(c8);
CGContextRef c9= UIGraphicsGetCurrentContext();
//CGFloat red4[4] = {1.0f, 0.0f, 0.0f, 1.0f};
CGContextSetLineWidth(c9, 2.0);
CGContextSetStrokeColorWithColor(c9, [UIColor purpleColor].CGColor);
CGContextBeginPath(c9);
//CGContextMoveToPoint(c5, 101.0f, 156.0f);
CGContextMoveToPoint(c9, 175.0f, 175.0f);
CGContextAddLineToPoint(c9, 230.0f, 125.0f);
CGContextStrokePath(c9);
CGContextRef c10= UIGraphicsGetCurrentContext();
//CGFloat red4[4] = {1.0f, 0.0f, 0.0f, 1.0f};
CGContextSetLineWidth(c10, 2.0);
CGContextSetStrokeColorWithColor(c10, [UIColor orangeColor].CGColor);
CGContextBeginPath(c10);
//CGContextMoveToPoint(c5, 101.0f, 156.0f);
CGContextMoveToPoint(c10, 175.0f, 175.0f);
CGContextAddLineToPoint(c10, 120.0f, 125.0f);
CGContextStrokePath(c10);
CGContextRef c11= UIGraphicsGetCurrentContext();
//CGFloat red4[4] = {1.0f, 0.0f, 0.0f, 1.0f};
CGContextSetLineWidth(c11, 2.0);
CGContextSetStrokeColorWithColor(c11, [UIColor magentaColor].CGColor);
CGContextBeginPath(c11);
//CGContextMoveToPoint(c5, 101.0f, 156.0f);
CGContextMoveToPoint(c11, 175.0f, 175.0f);
CGContextAddLineToPoint(c11, 120.0f, 225.0f);
CGContextStrokePath(c11);
CGContextRef c12= UIGraphicsGetCurrentContext();
//CGFloat red4[4] = {1.0f, 0.0f, 0.0f, 1.0f};
CGContextSetLineWidth(c12, 2.0);
CGContextSetStrokeColorWithColor(c12, [UIColor yellowColor].CGColor);
CGContextBeginPath(c12);
//CGContextMoveToPoint(c5, 101.0f, 156.0f);
CGContextMoveToPoint(c12, 175.0f, 175.0f);
CGContextAddLineToPoint(c12, 231.0f, 226.0f);
CGContextStrokePath(c12);
}
- (void)makeCircleAt:(CGPoint)center withDiameter:(float)diameter withColor:(int)myColor
{
float radius = diameter * 0.5;
CGRect myOval = {center.x - radius, center.y - radius, diameter, diameter};
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0);
CGContextAddEllipseInRect(context, myOval);
CGContextFillPath(context);
}
- (void)dealloc {
[super dealloc];
}
@end
.
我希望上面的代码动态地划分圆圈而不使用c5,c6 ...... c12块,我只想使用一个循环,其中我输入数字并根据数字划分圆圈。
答案 0 :(得分:2)
您可能希望将圆圈分成一系列弧线并绘制楔形。
沿着圆的圆周获得弧的起点和终点(x-h)^ 2 +(y -k)^ 2 = r ^ 2。然后绘制三条线:一条从中心开始和结束点,然后从开始点到结束点一条弧段。 (使用CGContextAddArc)。然后填写路径。
一旦你有一个数组中的周边点,你可以使用相同的循环遍历它们进行任意划分。
编辑:
Here is an old cocoa example that shows the math involved。
Here's an iPhone pie chart example.
我认为如果你谷歌“iPhone和饼图”,你应该找到许多解决相同基本问题的例子。