Основные текстовые рамки с монотуш
-
26-10-2019 - |
Вопрос
Используя Monotouch, я стараюсь отобразить основной текстовый элемент на нескольких строках. Пример, который я пытаюсь использовать, - это из Coretext_programming P17. Одна из проблем, с которыми я столкнулся, заключается в том, чтобы найти эквивалент для cfmutableattributedstringref, поэтому я пытался подчинить это для nsattributedString, однако следующий код ничего не отображает. Кто -нибудь знает о каких -либо примерах такого типа в Monotouch или знает причину, по которой следующее не работает. Спасибо.
public override void Draw (RectangleF rect)
{
base.Draw (rect);
CGContext context = UIGraphics.GetCurrentContext ();
context.TextMatrix = new CGAffineTransform();
CGPath path = new CGPath();
path.AddRect ( this.Bounds );
// created dictionary so this line does not crash
NSAttributedString stringToDraw = new NSAttributedString( "Hello", new NSDictionary() );
CTFramesetter framesetter = new CTFramesetter(stringToDraw);
CTFrame frame = framesetter.GetFrame( new NSRange(0,0), path, null );
frame.Draw( context );
}
Решение
Как это происходит, я перенес большинство из этих образцов в Monotouch, когда писал/тестировал структуру Monotouch.coretext. Затем, очевидно, совершенно забыл объединить их вверх по течению. :-/
Тем не менее, взгляните на Coretextdemo.cs, которые порты (почти линейны для линии) большинство образцов в PDF, с которым вы связаны.
На основе моего CoreTextDemo.cs
, ты пропускаешь:
- Собственно
CGAffineTransform.MakeScale()
вызов:context.TextMatrix = CGAffineTransform.MakeScale(1f, -1f);
- Вы не используете
NSMutableAttributedString
. (CFMutableAttributedStringRef
картыNSMutableAttributedString
.) - Вы не утилизируете свой
framesetter
, не вашframe
.
Могут быть другие, но в то время CoreTextDemo.cs
Код работал, эквивалентный коду Objective-C.
Другие советы
Не уверен, что это правильно, но здесь идет ...
От Apple CFMutableAttributedStringRef
Справочный документ:
Важный: Словаря атрибутов, установленные для приписываемой строки, всегда должны быть созданы с помощью KCFCopystringDictionaryKeyCallbacks для их обратных вызовов в словаре и kcftypedicticationaryvaluecallbacks для их обратных вызовов значений; В противном случае это ошибка.
Так что я верю, что создает это с new NSDictionary()
Параметр недостаточно.