0

わかりましたので、ここに私の質問があります。

方位角が 80 度だとします。シンプルな 10x10 の正方形で iPhone 画面にプロットしたいと思います。縦向きモードの iPhone の上部が北であると考えてみましょう。

これをどのように達成するかについてのアイデアはありますか?

ところで-次の方法は使いたくありません:

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

iPhone画面でX - Yコードを設定して、手動で画面にプロットしたいと思います。

4

2 に答える 2

1
- (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);
}
于 2012-06-19T23:11:54.460 に答える
1

したがって、達成したいことdrawRectはカスタムビューのメソッド内に存在する必要があるように思えます。その後、このビューは、必要な方法 (ストーリーボードまたはプログラム) によって画面に追加されます。いくつかの「角度」に基づいてビューの中心から直線を描くために使用できる実装例を次に示します。

- (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);
}
于 2012-06-19T23:12:48.077 に答える