あなたがobj-Cまたはスウィフトを使用するかどうかは知りませんが、結果を見るためにスウィフト遊び場ページにこれを貼り付けることができます。
細部の編集
import UIKit
import CoreText
import PlaygroundSupport
class PathView: UIView {
var myPath: UIBezierPath?
override func draw(_ rect: CGRect) {
if let pth = myPath {
UIColor.red.setStroke()
// glyph path is inverted, so flip vertically
let flipY = CGAffineTransform(scaleX: 1, y: -1.0)
// glyph path may be offset on the x coord, and by the height (because it's flipped)
let translate = CGAffineTransform(translationX: -pth.bounds.origin.x, y: pth.bounds.size.height + pth.bounds.origin.y)
// apply the transforms
pth.apply(flipY)
pth.apply(translate)
// stroke the path
pth.stroke()
// print the modified path for debug/reference
print(pth)
}
}
}
class TestViewController : UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// blue background so we can see framing
view.backgroundColor = UIColor(red: 0.25, green: 0.5, blue: 01.0, alpha: 1.0)
// use a large font so we can see it easily
let font = UIFont(name: "Times", size: 160)!
// Hebrew character for 8
var unichars = [UniChar]("ח".utf16)
unichars = [UniChar]("י".utf16)
// init glyphs array
var glyphs = [CGGlyph](repeatElement(0, count: unichars.count))
let gotGlyphs = CTFontGetGlyphsForCharacters(font, &unichars, &glyphs, unichars.count)
if gotGlyphs {
// get the cgPath for the character
let cgpath = CTFontCreatePathForGlyph(font, glyphs[0], nil)!
// convert it to a UIBezierPath
let path = UIBezierPath(cgPath: cgpath)
var r = path.bounds
// let's show it at 40,40
r = r.offsetBy(dx: 40.0, dy: 40.0)
let pView = PathView(frame: r)
pView.backgroundColor = .white
pView.myPath = path
view.addSubview(pView)
// print bounds and path data for debug/reference
print("bounds of path:", path.bounds)
print()
print(path)
print()
}
}
}
let vc = TestViewController()
PlaygroundPage.current.liveView = vc
多くのエラーチェック/処理が必要ですが、実際の文字グリフ(ラベルフレームではなく)の境界を見つけて使用することができます。
結果:
CTFont' 'を見てみましょう - 特に**取得グリフデータ**セクション:https://developer.apple.com/documentation/coretext/ctfont-をq6r – DonMag
私はそれを見ましたが、それは特定のグリフではなく、フォントのデータを取得します。 –
私はそれを取り戻す。グリフの配列に使用できる境界データがあるようです。私はそれを見るでしょう.... –