2013-01-23 11 views
0

저는 C++에서 크게 CoreFoundation 인 코드 기반으로 작업하고 있습니다. 나는 이미 그것들을 사용하지 않는 소스 파일에 Foundation 객체를 도입하지 않는 것을 선호한다.CFAttributedString의 취소 선 속성 설정

먼저 NSAttributedString을 만들지 않고 NSStrikethroughStyleAttribute를 사용하여 CFAttributedString을 만들고 싶습니다. 나는 그들이 무료 장거리 전화다는 것을 알고있다, 그러나 나는 가능할 경우이 원본 파일을 obj-c에서 자유롭게 유지하고 싶다.

따라서 Foundation을 거치지 않고 취소 선 속성이있는 CFAttributedString을 만드는 방법이 있습니까? 그렇다면 어떻게해야합니까?

답변

0

나는이 CFAttributedString이 결국 AppKit에 의해 렌더링 될 것이라고 가정하고 있습니다. CoreText를 사용하여 렌더링하는 경우 CoreText에 속성이 없으므로 직접 취소 선을 구현해야합니다 (일부 샘플 코드에서는 Cocoanetics post).

obj-c를 사용하는 앱의 일부로 문자열이 AppKit으로 렌더링되었다고 가정하면 실제로 원하는 것은 상수 NSStrikethroughStyleAttributeName을 C 코드에 표시하는 것입니다.

이 작업을 수행하는 가장 간단한 방법은 파일의 상단에이를 추가 아마 :

export CFStringRef NSStrikethroughStyleAttributeName; 
+1

문자열이'CTLineDraw'를 사용하여 렌더링됩니다. 몇 가지 실험을 마친 후, 나는 당신이 옳았다 고 확신합니다. 나는'NSAttributedString'에 사용 가능한 속성을 사용하여'CFAttributedString'을 설정할 수 있기를 희망했습니다. 그들은 유료 무료 브리지이므로 가능해야하고 CTLineDraw로 렌더링합니다. 그러나 AppKit은 CoreText 렌더링을 유도 할 수없는 속성이있는 문자열 속성을 활용할 수 있다고 생각합니다. –

+0

@ChristopherCole : 기본적으로 속성이 지정된 문자열은 임의의 속성과 결합 된 문자열이며 속성은 문자열의 다른 지점에서 달라질 수 있습니다. AppKit은 해석하고 렌더링하는 방법을 알고있는 속성 세트를 정의합니다. CoreText는 별도의 세트를 정의합니다. 원하는 경우 사용자 지정 특성 집합을 정의하여 원하는대로 사용할 수 있습니다. 실제로 Cocoanetics 지에서 일어나는 일입니다. 사용자 정의 취소 선 속성이 정의되며 사용자 정의 드로잉 루틴은이를 찾는 방법과 해석 방법을 알고 있습니다. –

+0

고맙습니다. 속성 문자열의 용도와 특성을 사용하는 방법을 더 잘 이해하고 있다고 생각합니다. –