0

このプロジェクトhttps://github.com/Eclair/CircleProgressBarからバインド ライブラリを作成しようとしています。

Sharpie を使用して、ApiDefinition.cs と .a ファイルを生成します。

> sharpie pod init ios CircleProgressBar
> sharpie bind

プロジェクトに .a ファイルをコピーし、生成された C# コードを ApiDefinition.cs ファイルに配置しました。ただし、生成されたコードはコンパイルされません。

問題は、これらの行だと思います

typedef NSString*(^StringGenerationBlock)(CGFloat progress);
typedef NSAttributedString*(^AttributedStringGenerationBlock)(CGFloat progress);

これらに変換されます

delegate string StringGenerationBlock (nfloat arg0);
delegate NSAttributedString AttributedStringGenerationBlock (nfloat arg0);

しかし、コンパイラは文字列を IntPtr に置き換えることを提案します。そうしても、プロジェクトがコンパイルされていても、CircleProgressBar をインスタンス化しようとすると、アプリケーションがクラッシュします。

4

1 に答える 1

0

1位:

stringエラーの原因となっている をNSString( IntPtr ではなく) に変更します。

// typedef NSString * (^StringGenerationBlock)(CGFloat);
delegate NSString StringGenerationBlock (nfloat arg0);

これで、ソリューションのバインディング プロジェクトがエラーなしでコンパイルされるはずです。

2番目:

実機でのデバッグ・テスト

デフォルトsharpie pod XXXXXでは、iOS シミュレーターで動作するスタティック ライブラリは作成されず、ファット ライブラリの作成も許可されないため手動で作成する必要があります。

iphonesimulator必要に応じて、ベースの静的ライブラリを作成します。

そのためには、 を にsdk設定して xcode プロジェクトを手動でビルドする必要がありますiphonesimulator

すなわち

xcodebuild -project Pods.xcodeproj -target Pods -sdk iphonesimulator -configuration Debug clean build

その出力をオリジナルと一緒に使用して.a、ファット ライブラリを作成できます。

本当に簡単な例:

if (circleProgressBar == null) {
    circleProgressBar = new CircleProgressBar ();
    circleProgressBar.Frame = new CoreGraphics.CGRect (this.View.Frame.Width / 4, this.View.Frame.Width / 4, this.View.Frame.Width / 2, this.View.Frame.Width / 2);
    circleProgressBar.ProgressBarWidth = 33.0f;
    circleProgressBar.BackgroundColor = UIColor.Clear;
    circleProgressBar.ProgressBarProgressColor = UIColor.Green;
    circleProgressBar.ProgressBarTrackColor = UIColor.Red;
    circleProgressBar.StartAngle = 0.0f;
    circleProgressBar.SetProgress (0.0f, false);
    this.Add (circleProgressBar);
} else {
    circleProgressBar.SetProgress (circleProgressBar.Progress + 0.1f, true);
}

結果:

ここに画像の説明を入力

于 2016-01-19T18:13:02.877 に答える