iPad アプリの次の図に示すように、グラフを描画する必要があります。利用可能な無料のネイティブ チャート API はありますか?
またはそれを描くための助け...
どんな助けもかなりのものです。
iPad アプリの次の図に示すように、グラフを描画する必要があります。利用可能な無料のネイティブ チャート API はありますか?
またはそれを描くための助け...
どんな助けもかなりのものです。
Quartz 2Dで行きたいと思います。どの図書館もあなたの取引を行うとは思いません。自分で作成する必要があります。ここに私の考えがあります。
ある種類のチャートでは、速度計がどのように機能するかを理解できます。ええ、私はそのためのリンクを検索しませんでした。アイデアがうまくいくことを願っています。パーセンテージの角度を計算し、それに応じて弧を描くことができます。これは難しいことではありません。
ドロップレットの場合は、少し忙しいでしょう。しかし、ここにそのためのいくつかのロジックがあります:
ドロップレットのようなチャートの各セグメントのパーセンテージがあると思います。それらの半径を計算できます! 下の画像があなたのアイデアをよりよく説明することを願っています。SOは私にコードのようなものを与えることではないので、コードではなくロジックを共有しようとしています:)
お役に立てれば
GitHubに作業中のプロジェクトがあります。
#import "PlectrumView.h"
@implementation PlectrumView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
}
return self;
}
-(void) drawPlectrumWithPercentage:(CGFloat) percentage color:(UIColor *)color
{
CGFloat factor = self.frame.size.width ;
percentage*=factor;
UIBezierPath* plectrum = [UIBezierPath bezierPathWithRoundedRect: CGRectMake(0, factor - percentage, percentage,percentage)
byRoundingCorners: UIRectCornerTopLeft | UIRectCornerTopRight | UIRectCornerBottomRight
cornerRadii: CGSizeMake(percentage/2, percentage/2)];
[color setFill];
[plectrum fill];
}
- (void)drawRect:(CGRect)rect
{
[self drawPlectrumWithPercentage:1.0 color:[UIColor colorWithWhite:.9 alpha:1]];
[self drawPlectrumWithPercentage:.75 color:[UIColor colorWithRed:245.0/255.0 green:134.0/255.0 blue:122.0/255.0 alpha:1]];
[self drawPlectrumWithPercentage:.61 color:[UIColor colorWithRed:171.0/255.0 green:212.0/255.0 blue:105.0/255.0 alpha:1]];
}
@end
結果は
ピックのコードを変更して、面積が幅ではなくパーセンテージを表すようにします。より自然な感じです。
-(void) drawPlectrumWithPercentage:(CGFloat) percentage color:(UIColor *)color
{
static CGFloat pi = 3.141592653589793;
static CGFloat radius100percent = 50.0;
static CGFloat area100percent;
static CGFloat threeFouthPiPlusOne;
area100percent= radius100percent * radius100percent * pi *3/4 + radius100percent*radius100percent;
threeFouthPiPlusOne = (1 + (pi*(3.0/4.0)));
CGFloat area = area100percent * percentage;
CGFloat newRadius = sqrt(area / threeFouthPiPlusOne);
percentage = newRadius/ 50.0;
CGFloat factor = self.frame.size.width ;
percentage*=factor;
UIBezierPath* plectrum = [UIBezierPath bezierPathWithRoundedRect: CGRectMake(0, factor - percentage, percentage,percentage)
byRoundingCorners: UIRectCornerTopLeft | UIRectCornerTopRight | UIRectCornerBottomRight
cornerRadii: CGSizeMake(percentage/2, percentage/2)];
[color setFill];
[plectrum fill];
}
SVGを使用する場合は、次のような関数を使用して形状を簡単に作成できます。
/**
* @param {SVGPathElement} aShape a SVG path element
* @param {number} radius the radius of the plectrum's arc
* @param {string} fillColor color in "#rrggbb" format
*/
function drawPlectrum(aShape, radius, fillColor) {
// Creating a string which defines a path in SVG
// M = moveto, A = line to, etc. See http://www.w3.org/TR/SVG/paths.html
var ss="M "+parseInt(0)+" "+parseInt(0)+" "; // moveto 0, 0
ss+="L "+parseInt(0)+" "+parseInt(radius)+" "; // lineto 0, R
ss+="A "+parseInt(radius)+" "+parseInt(radius)+" 0 0 0 "+parseInt(radius)+" "+parseInt(2*radius)+" ";// elliptic curve to R, 2*R
ss+="A "+parseInt(radius)+" "+parseInt(radius)+" 0 0 0 "+parseInt(2*radius)+" "+parseInt(radius)+" ";// elliptic curve to 2*R, R
ss+="A "+parseInt(radius)+" "+parseInt(radius)+" 0 0 0 "+parseInt(radius)+" "+parseInt(0)+" "; // elliptic curve to R, 0
ss+="Z"; // closepath
// The d attribute of the path element holds the line information
// In XML the element will essentially be <path d="*the created string*">
aShape.setAttribute("d", ss);
// Give the color
aShape.setAttribute("fill", fillColor);
}
連続する図面は次のようになります。
// Note that 3 different path elements are used to overlap the plectrums
drawPlectrum(node, 100, "#aaaaaa");
drawPlectrum(node2, 75, "#33dd33");
drawPlectrum(node3, 50, "#3333dd");
編集1: わかりやすくするためにコードにコメントを追加しました
あなたの例の写真は、実際にはQuartz 2Dを使用して非常に簡単に描画できます。チャートがどのように表示されるかを正確に気にしていない場合は、既存 のものを調べることをお勧めします。表示されているとおりにグラフを表示する必要がある場合 (たとえば、Web アプリに似ている必要があるため)、自分で描画することをお勧めします。あなたが示すような単純なチャートを描くのはそれほど難しいことではありません:
試してみたい場合や詳細が必要な場合はお知らせください。
このプロジェクトをダウンロードしてこれを使用しますが、そのために ARC を使用しています。それがあなたを助けることを願っています!
上記のすべては、数学コードを使用してサイズ/直径が増加する基礎となる形状を持つ透明な画像を使用しておそらく実行できると思います。
Arc Percentages を使用すると、ダイヤル(available area / 100) * Amount of Progress
を配置してから、画像を回転させてダイヤルを所定の位置に配置し、下にある色付きの正方形を左から右に同じ量だけ塗りつぶすことができますか? これにより、コードの描画が大幅に節約されます。