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.
Właśnie wysłałem błąd. Dam ci znać, jeśli coś usłyszę. – mohsenr