2012-01-08 5 views
0

別の言葉で異なるスタイルの「ラベル」を作成しようとしています。hereのようなものです。 問題は - 私が見る限りでは、UATextLayerのMonoTouchの実装では、Stringプロパティに型文字列があるため、NSAttributedStringをStringプロパティに割り当てることはできません。MonoTouchでAttributedStringを使用したCATextlayer

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

(はい、別のラベルを追加することができますが、より良い解決策がある場合は、そうではありません)。 (ミゲルからの回答に応じて)

EDIT:代わりに「void_objc_msgSend_IntPrt」の答えのコードのGetHandlerに変更してまで「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のコメントを解除し、その問題は層ではない場合。今の

答えて

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のを実装しています。

+0

sel_registerNameがプライベートで、別のクラスから呼び出すことができないようですが、何かが不足していますか? – Johan

+0

...私は自分自身を見つけました:Selector.GetHandle( "string") – Johan

+0

私はそれがうまく機能していないので、私の質問を編集しました... – Johan

関連する問題