CATextlayer с AttributedString в MonoTouch - PullRequest
       29

CATextlayer с AttributedString в MonoTouch

0 голосов
/ 08 января 2012

Я пытаюсь создать «ярлык» с разными стилями для разных слов, вроде как описано здесь .Проблема в том, что, насколько я вижу, реализация UATextLayer в MonoTouch не допускает присваивания NSAttributedString свойству String, поскольку свойство String имеет строку типа.

Это ошибка в реализации или есть другой способ сделать это?

(Да, я знаю, что могу добавить отдельные метки - но я бы предпочел, чтобы, когда есть лучшее решение).

РЕДАКТИРОВАТЬ (в ответ на ответ Мигеля):

После изменения в GetHandler и исправления "void_objc_msgSend_IntPtr" вместо "void_objc_msgSend_IntPrt" код в ответе компилируется и запускается, но он все равно не работает (я все же довольно быстро пометил его как ответ).Нет ошибок, но текст не отображается.

Код:

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 Ответ

1 голос
/ 09 января 2012

На данный момент вы можете попробовать:

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

Он реализует свойство AttributedString в CATextLayer, которое вы можетеустановлен.

...