Базовый текст FrameSetter с одноцветным - PullRequest
1 голос
/ 26 июля 2011

Используя 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 );
    }

Ответы [ 2 ]

2 голосов
/ 28 июля 2011

Как оказалось, я портировал большинство этих образцов в 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.

0 голосов
/ 26 июля 2011

Не уверен, что это правильно, но здесь идет ...

Из Apple CFMutableAttributedStringRef Справочный документ:

Важно: Словари атрибутов, установленные для приписанной строки, должны всегда создаваться с помощью kCFCopyStringDictionaryKeyCallbacks для их обратные вызовы словаря и kCFTypeDictionaryValueCallBacks для их значение обратных вызовов; в противном случае это ошибка.

Поэтому я считаю, что его создания с параметром new NSDictionary() недостаточно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...