core-plot 使ったアプリのArchive方法


core-plot を自分のプロジェクトに組み込むとき、Googleの下記のドキュメントに従えば、core-plotのプロジェクトを自分のプロジェクトに取り込むことになる。
Using Core Plot Within an Application

しかしこのままだとArchiveしたものは複数のプロダクトを含んでいるという以下のようなメッセージが出てValidateやSubmitできる形にならない。

App Name does not contain a single–bundle application or contains multiple products. Please select another archive, or adjust your scheme to create a single–bundle application.”

解決方法は以下のサイトにかいてあったので、メモ。

Xcode 4 – Problem Submitting App With Static Library

広告

core-plot scatter での小技メモ


1)Y軸のラベルを固定(スクロールしない)

CPTXYAxis *y = axisSet.yAxis;
y.axisConstraints = [CPTConstraints constraintWithLowerOffset:0.0];

2)Y軸のmajorIntervalLengthにグリッドをひく
lineStyleをなにか設定して。

CPTXYAxis *y = axisSet.yAxis;
y.majorGridLineStyle = lineStyle;

3)グリッドのベース線とグリッド線を値の最大のところまでのみ表示

y.visibleRange   = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromInteger(0)
length:CPTDecimalFromInteger(yの最大値)];
y.gridLinesRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromInteger(0)
length:CPTDecimalFromInteger(xの最大値)];

※y.gridLinesRangeはxの最大値であることに注意

4)y軸方向にはスクロールしない、かつXは0以下にスクロールしない
ヘッダに <CPTPlotSpaceDelegate>を追加して、

-(CGPoint)plotSpace:(CPTPlotSpace *)space willDisplaceBy:(CGPoint)displacement
{
    CGFloat x = displacement.x;
    float loc = [[NSDecimalNumber decimalNumberWithDecimal:[((CPTXYPlotSpace*)space).xRange location]] floatValue];
    if (loc < 0 && x > 0) x = 0;
    return CGPointMake(x, 0);
}
-(CPTPlotRange *)plotSpace:(CPTPlotSpace *)space willChangePlotRangeTo:(CPTPlotRange *)newRange forCoordinate:(CPTCoordinate)coordinate
{
    if (coordinate == CPTCoordinateY) {
        newRange = ((CPTXYPlotSpace*)space).yRange;
    }
    return newRange;
}

参考:
iphone – Core plot disable y axes scaling, scrolling – Stack Overflow
iphone – Allow horizontal scrolling only in the core-plot barchart? – Stack Overflow の最後のコメント