Core Text で縦書き(3)
前回 Core Text で縦書き(2) - 錯綜 のコメント欄で90度回転しなくていいやつを教えてもらえた。 こんな誰も読んでないようなブログでも親切な人が教えてくれたりするものである。 ありがたいことである。
というわけでやってみた。 まず普通に CTFrame を使って横書き。
… let astr = NSAttributedString(string: string) let setter = CTFramesetterCreateWithAttributedString(astr) let path = CGPath(rect: rect, transform: nil) let frame = CTFramesetterCreateFrame(setter, CFRange(), path, nil) …
次に文字列のアトリビュートに縦書きグリフを、 フレームのアトリビュートに進行方向右から左を、指定する。
… let stringAttrs: [NSAttributedString.Key : Any] = [ .verticalGlyphForm: true, ] let astr = NSAttributedString(string: string, attributes: stringAttrs) let setter = CTFramesetterCreateWithAttributedString(astr) let path = CGPath(rect: rect, transform: nil) let frameAttrs = [ kCTFrameProgressionAttributeName: CTFrameProgression.rightToLeft.rawValue, ] let frame = CTFramesetterCreateFrame(setter, CFRange(), path, frameAttrs as CFDictionary) …
最初 CFDictionary に CTFrameProgression.rightToLeft を入れていて動かなくて困った。 rawValueがキモだった。分かってみれば当然だけど。
縦書きはたぶんこれで決まりだ。