(잠재적으로 거대한) 구성 요소에 대해 효율적인 히트 테스트를 수행해야하므로 내 모든 프리미티브를 NSBezierPath
인스턴스로 나타 냈습니다. 지금까지 모든 일은 훌륭합니다. 내가 베 지어 경로로 문자열을 변환하는 애플의 SpeedometerView 예에서 NSString (BezierConversions)
범주를 사용하고 있습니다 :NSString 드로잉 대 NSBezierPath 드로잉 문자열
는 지금은 특히 뷰에서의 위치를 반영, NSString
객체를 변환하는 데 문제가 있습니다. 문자열을 생성
베 지어 경로는 내가이 질문은 정말 약
NSBezierPath
및transformUsingAffineTransform:
대 겠지 그래서 꽤 작업을 수행하는보기에서NSString
인스턴스 위치의 위치에 맞게 큰하지만의 위치를 찾습니다 .NSAffineTransform
의 조합 심지어 사소한 경우는 실패 내 테스트 프로젝트에서
을 뷰에 적용 NSString drawAtPoint:
:
회색 베 지어 사용하여 그려 문자열의 표현 :
NSAffineTransform *moveFinal = [NSAffineTransform transform];
[moveFinal translateXBy:x yBy:y];
[textBezier transformUsingAffineTransform:moveFinal];
및
[testString drawAtPoint:NSMakePoint(x, y)
withAttributes:attributes];
같은 속성, 동일한 입력 위치,보기에서 다른 위치를 통해 보라색 문자열입니다.
그리고 회전 된 텍스트로 인해 더 악화됩니다.
업데이트 # 1
이 보이는 지금 NSString
보 실험
NSString sizeWithAttributes:
NSBezierPath bounds
에 의해 반환 된 다른 경계 상자까지 끓는처럼 undingRectWithSize
경계 텍스트의 크기와 동일하지 않습니다 .. 갈 수 있어요 : 오프셋
NSBezierPath
는 bezierWithFont에서 돌아왔다. 예를 들어, 큰 로마자 italic * f *는'NSAttributedString size'에 의해 반환 된 상자의 경계를 훨씬 벗어납니다. – hamstergene
그래, 그래서 나는 'boundingRectWithSize'로 바꿨다. 다양한 글꼴 크기에 대한 좋은 소개가 [여기] (https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/FontHandling/Tasks/GettingFontMetrics)에서 찾을 수 있습니다.html) 여기서 sizeWithAttributes는 외부 바운딩 박스를 사용하고 NSBezierPath bounds는 글리프가 차지하는 실제 영역을 사용합니다. – Jay