OSXでCore Graphicsを使用してスピードゲージの要素を描画しようとしています。私はほとんどそれを持っていますが、ゲージの内側のセンターティックに少しの助けが必要です。ここで私は何をしようとしているのイメージは次のとおりです。ここでNSXのOSXでCore Graphicsを使用したスピードメーターを描画する
は、私がこれまで持っているもののイメージは次のとおりです。
私は描画する方法を知っていますサークルリングと、このようなゲージの中心の周りに基づいたセグメントを描画する方法:
- (void)drawOuterGaugeRingsInRect:(CGContextRef)contextRef rect:(NSRect)rect {
CGContextSetLineWidth(contextRef,self.gaugeRingWidth);
CGContextSetStrokeColorWithColor(contextRef, [MyColors SpeedGaugeOuterRingGray].CGColor);
CGFloat startRadians = 0;
CGFloat endRadians = M_PI*2;
CGFloat radius = self.bounds.size.width/2 - 5;
CGContextAddArc(contextRef, CGRectGetMidX(rect),CGRectGetMidY(rect),radius,startRadians,endRadians,YES);
//Render the outer gauge
CGContextStrokePath(contextRef);
//Draw the inner gauge ring.
radius -= self.gaugeRingWidth;
CGContextSetStrokeColorWithColor(contextRef, [MyColors SpeedGaugeInnerRingGray].CGColor);
CGContextAddArc(contextRef, CGRectGetMidX(rect),CGRectGetMidY(rect),radius,startRadians,endRadians,YES);
//Render the inner gauge
CGContextStrokePath(contextRef);
radius -= self.gaugeRingWidth;
//Draw and fill the gauge background
CGContextSetFillColorWithColor(contextRef, [MyColors SpeedGaugeCenterFillBlack ].CGColor);
CGContextSetStrokeColorWithColor(contextRef, [MyColors SpeedGaugeCenterFillBlack].CGColor);
CGContextAddArc(contextRef, CGRectGetMidX(rect),CGRectGetMidY(rect),radius,startRadians,endRadians,YES);
//Render and fill the gauge background
CGContextDrawPath(contextRef, kCGPathFillStroke);
/*BLUE CIRCULAR DIAL */
//Prepare to draw the blue circular dial.
radius -= self.gaugeRingWidth/2;
//Adjust gauge ring width
CGContextSetLineWidth(contextRef,self.gaugeRingWidth/2);
CGContextSetStrokeColorWithColor(contextRef, [MyColors SpeedGaugeBlue].CGColor);
CGFloat startingRadians = [MyMathHelper degressToRadians:135];
CGFloat endingRadians = [MyMathHelper degressToRadians:45];
CGContextAddArc(contextRef, CGRectGetMidX(rect),CGRectGetMidY(rect),radius,startingRadians,endingRadians,NO);
//Render the blue gauge line
CGContextStrokePath(contextRef);
}
上記で呼び出されたコードインナーのオフ、私はここで何が起こっているかを理解し
- (void)drawInnerDividerLines:(CGContextRef)context rect:(NSRect)rect {
CGFloat centerX = CGRectGetMidX(rect);
CGFloat centerY = CGRectGetMidY(rect);
CGContextSetLineWidth (context, 3.0);
CGContextSetRGBStrokeColor (context, 37.0/255.0, 204.0/255.0, 227.0/255.0, 0.5);
CGFloat destinationX = centerX + (centerY * (cos((135)*(M_PI/180))));
CGFloat destinationY = centerY + (centerX * (sin((135)*(M_PI/180))));
NSPoint destinationPoint = NSMakePoint(destinationX, destinationY);
CGContextMoveToPoint(context, centerX, centerY);
CGContextAddLineToPoint(context, destinationPoint.x, destinationPoint.y);
CGContextStrokePath(context);
}
が、私は少し線を描画されて解決しようとしている問題:私のNSView
キー部で方法はこちらのコードです青色の線で、ビューの中心点に向かって延びていますが、中心まで完全に描かれていません。私はこれを達成するために数学と描画ロジックを修正する方法について少し不安です。ここでは、Core Graphics Drawingの角度を基にした単位円です。
私が解決しようとしている主な問題は、次のとおりです。
各ゲージの目盛りのための凝視点として、ライトブルー、内側のラインのオフ適切な出発点を定義する方法。今、ゲージの中央から端までフルラインを描いています。
ティックゲージの長さを青線の原点の中心に向けるように制御する方法を教えてください。
この問題を解決するための正しい方法で私を指摘するヒントやアドバイスはありがたいです。
私が必要としていたもので、ありがとう! – zic10