Adam Flatau
Adam Flatau

Reputation: 168

Plotting out Compass Bearing on iPhone screen

Ok so here is my question,

Let's say you have a bearing of 80 degrees. I would like to plot that out on the iPhone screen with a simple 10x10 square. Let's figure the top of the iPhone in portrait mode is North.

Any ideas on how I would accomplish this?

BTW - I don't want to use the following method:

CGAffineTransform where  = CGAffineTransformMakeRotation(degreesToRadians(x_rounded));
[self.compassContainer2 setTransform:where];

I would like to plot out on the screen manually via setting the X -Y cords on the iPhone screen.

Upvotes: 0

Views: 613

Answers (2)

heckman
heckman

Reputation: 499

So it sounds to me like what you want to accomplish should exist within the drawRect method of a custom view, and then this view would be added to your screen by whatever method you desired (i.e. storyboard or programmatically). Here is a possible implementation that you could use to draw a straight line from the center of the view based on some 'angle':

- (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    // Drawing code
    CGFloat angle = 0.0 /180.0 * M_PI ;

    //Set this to be the length from the center
    CGFloat lineDist = 320.0;
    CGContextSetLineWidth(context,  5.0);
    //Set Color
    [[UIColor redColor] setStroke];

    //Draw the line
    CGContextBeginPath(context);
    //Move to center
    CGContextMoveToPoint(context, self.frame.size.width/2, self.frame.size.height/2);

    //Draw line based on unit circle
    //Calculate point based on center starting point, and some movement from there based on the angle.
    CGFloat xEndPoint = lineDist * sin(angle) + self.frame.size.width/2;
    //Calculate point based on center starting point, and some movement from there based on the angle. (0 is the top of the view, so want to move up when your answer is negative)    
    CGFloat yEndPoint = -lineDist * cos(angle) + self.frame.size.height/2;

    CGContextAddLineToPoint(context, xEndPoint, yEndPoint);

    CGContextStrokePath(context);
}

Upvotes: 1

inwit
inwit

Reputation: 961

- (void)drawRect:(CGRect)rect
{
    float compass_bearing = 80.0;  // 0 = North, 90 = East, etc.

    CGContextRef theContext = UIGraphicsGetCurrentContext();
    CGMutablePathRef path = CGPathCreateMutable();

    CGPathMoveToPoint(path, NULL, 5.0, 5.0);
    CGPathAddLineToPoint(path, NULL,
        5.0 + 5.0 * cos((compass_bearing - 90.0) * M_PI / 180.0),
        5.0 + 5.0 * sin((compass_bearing - 90.0) * M_PI / 180.0));

    CGContextSetLineWidth(theContext, 2.0);
    CGContextSetStrokeColorWithColor(theContext, [UIColor blackColor].CGColor);
    CGContextAddPath(theContext, path);
    CGContextStrokePath(theContext);

    CGPathRelease(path);
}

Upvotes: 1

Related Questions