0

ここで説明するような、さまざまな単語にさまざまなスタイルの「ラベル」を作成しようとしています。問題は、私が見る限り、UATextLayerのMonoTouch実装は、Stringプロパティのタイプがstringであるため、NSAttributedStringをStringプロパティに割り当てることを受け入れないことです。

これは実装のエラーですか、それともこれを行う別の方法がありますか?

(はい、個別のラベルを追加できることは承知していますが、より良い解決策がある場合は追加したくありません)。

編集(ミゲルからの回答に応じて):

GetHandlerに変更し、「void_objc_msgSend_IntPrt」ではなく「void_objc_msgSend_IntPtr」に修正した後、回答のコードはコンパイルされて実行されますが、とにかくうまくいきません(回答としてマークするのが少し速かったです)。エラーはスローされませんが、テキストは表示されません。

コード:

string _text="Example string";
if(_textLayer==null) {
    _textLayer = new CATextLayer();
    _textLayer.Frame = new RectangleF(50,698,774,50);
    _textLayer.Wrapped=true;
    _textLayer.ForegroundColor=UIColor.White.CGColor;
    _textLayer.BackgroundColor=UIColor.Clear.CGColor;
    Layer.AddSublayer(_textLayer);
}

//_textLayer.String=_text;
CTFont _font=new CTFont("MarkerFelt-Thin",48);
CTStringAttributes _attrs=new CTStringAttributes();
_attrs.Font=_font;
_attrs.ForegroundColor = UIColor.White.CGColor;

var nsa = new NSAttributedString(_text);
Messaging.void_objc_msgSend_IntPtr(
        _textLayer.Handle,
        Selector.GetHandle("string"), 
        nsa.Handle);

コメントを外すと_textLayer.String=_textテキストが表示されます(もちろん属性はありません)ので、問題はレイヤーにありません。

4

1 に答える 1

1

今のところ、次のことを試すことができます。

using MonoTouch.ObjCRuntime;

var caTextLayer = new CATextLayer ();
var nsa = new NSAttributedString ();
[..]
Messaging.void_objc_msgSend_IntPrt (
    caTextLayer.Handle, 
    Selector.sel_registerName ("string"), 
    nsa.Handle);

または、次のバージョンのこのプレビューをダウンロードできますか?

http://tirania.org/tmp/monotouch.dll

これは、設定可能なCATextLayerにプロパティAttributedStringを実装します。

于 2012-01-09T13:45:29.380 に答える