2010-05-05 12 views
7

Próbuję znaleźć granice wiersza tekstu w tekście podstawowym. Dla uproszczenia załóżmy, że ma jedną postać. Obecnie używam następujące metody:Znajdowanie prostego obramowania tekstu w tekście rdzenia

line = CTLineCreateWithAttributedString(attrString); 
rect = CTLineGetImageBounds(line, context); 

Działa większość czasu, ale dla niektórych znaków, takich jak matematyka kursywą d (Unicode: 0x1D451) lub matematyki kursywą Q (Unicode: 0x1D45E) szerokość jest nieco krótka.

Próbowałem użyć CTLineGetTypographicBounds() lub CTFramesetterSuggestFrameSizeWithConstraints, ale one również nie pomogły (myślę, że używają glifów do określenia szerokości, a nie szerokości graficznej). Ponieważ sama czcionka nie jest pochylona, ​​nie mogę również użyj kąta pochylenia, aby to poprawić.

Próbowałem uzyskać dostęp do glifów bezpośrednio i używając CTFontCreatePathForGlyph(), ale nie udało mi się, ponieważ CGGlyph i UniChar mają 16 bitów i potrzebuję 32-bitowych znaków.

Czy ktoś wie, czy robię coś złego? Jeśli tak, to w jaki sposób?

Aktualizacja:

Aby upewnić się, że nie jest to problem związany z czcionką, użyłem różnych czcionek. Problem występuje nawet w przypadku znaków ASCII w Arial Italic.

Aktualizacja:

ignorowanie mojej poprzedniej aktualizacji! Okazuje się, że ten (problem z Arial Italic) był moim własnym błędem. Pierwszy problem nadal jednak jest.

Odpowiedz

3

Po zgłoszeniu błędu, który popełniłem, najwyraźniej jest to problem z CoreTextem, pojawiający się w rzadkich przypadkach. Powiadomię Cię, gdy tylko znajdę poprawkę.

Aktualizacja: 15 marca '12

zapomniałem zaktualizować to wcześniej, ale to jest stała. Poprawka jest w systemie OS X Lion/iOS 5.

1

Z tego co wiem, CTLineGetImageBounds jest prawidłową funkcją do użycia. Proponuję zgłoszenie błędu w RadarWeb.

+1

Właśnie wysłałem błąd. Dam ci znać, jeśli coś usłyszę. – mohsenr

Powiązane problemy