i m the beginner in iphone. I want the divide the circle in equal parts. I have the code,
#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);
CGContextSetStrok开发者_运维技巧eColorWithColor(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
.
I want the above code divide the circle dynamically with out using c5,c6......c12 block, simply i want to using a loop in which i entering the number and dividing the circle on the basis of number.
You probably want to divide the circle up into a series of arcs and draw wedges.
Get the start and end points of the arcs along the circumference of the circle suing (x - h)^2 + (y - k)^2 = r^2. Then draw three lines: One each the start and end points from the center and then one arc segment from he start point to end point. (Use CGContextAddArc). Then fill in the path.
Once you have the points along the perimeter in an array, you can loop through them using the same loop for any arbitrary division.
Edit:
Here is an old cocoa example that shows the math involved.
Here's an iPhone pie chart example.
This thread has more links.
I think if you google "iPhone and Pie Chart" you should hit numerous examples for solving the same basic problem.
精彩评论