Вопрос

Используя 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() Параметр недостаточно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top