문제

내 질문을하기 전에 이것은 Apple의 문서에서 나온 것입니다. Quartz를 사용하여 문자열의 너비를 결정하는 방법 :

텍스트 측정이 애플리케이션에 중요한 경우 Quartz 2D 기능을 사용하여 계산할 수 있습니다. 그러나 먼저 강도가 텍스트 레이아웃 및 측정에있는 ATSUI 사용을 고려할 수 있습니다. ATSUI에는 텍스트 메트릭을 얻는 몇 가지 기능이 있습니다. 층 후 텍스트 메트릭을 얻을 수있을뿐만 아니라 드문 경우 필요한 경우 텍스트 전 메트릭을 얻을 수 있습니다. 계산을 직접 수행 해야하는 쿼츠와 달리 ATSUI는 측정 값을 계산합니다. 예를 들어, ATSUI 함수를 AtSumeasureTextImage로 호출하여 텍스트에 대한 이미지 경계 사각형을 얻을 수 있습니다.

석영 텍스트가 Atsui (또는 Cocoa)보다 필요에 더 적합하다고 결정하면 쿼츠가 그려지기 전에 다음 단계를 따라 텍스트 너비를 측정 할 수 있습니다.

  1. 현재 텍스트 위치를 얻으려면 함수 CGContextGetTextPosition을 호출하십시오.
  2. 텍스트 드로잉 모드를 함수 cgcontextsettextDrawingMode를 사용하여 kcgtextinvisible로 설정하십시오.
  3. 함수 cgcontextshowtext를 호출하여 텍스트를 그려 현재 텍스트 위치에서 텍스트를 그립니다.
  4. 함수 cgcontextGetTextPosition을 호출하여 최종 텍스트 위치를 결정하십시오.
  5. 텍스트의 너비를 결정하려면 결말 위치에서 시작 위치를 빼십시오.

내 질문은 다음과 같습니다.

  1. 이것이 코어 그래픽을 사용하여 문자열의 너비를 결정하는 가장 좋은 방법입니까? 어리석은 것처럼 보이고 내 텍스트가 2D 그래픽 요소와 공존하기 때문에 모든 렌더링에 동일한 컨텍스트를 사용하고 싶습니다. 나는 다음과 같은 소형 방법이 있기를 바랐다.

    CGContextGetTextWidthAndHeight(context, text);
    
  2. Atsui는 구식이며 핵심 텍스트로 대체 될 것이라고 읽었습니다. 그게 사실이고 그렇다면 iOS에 있습니까?

도움이 되었습니까?

해결책

iPhone SDK에는 방법에 대한 방법이 있습니다. NSString 그것은 당신이 원하는 것을 제공합니다.

iOS 7.0 기준으로 이 방법은 다음과 같습니다:

- boundingRectWithSize:options:attributes:context:
- sizeWithAttributes:

이전 버전의 iOS에서 우리는 이것들을 가득 채웠습니다.

– sizeWithFont:  
– sizeWithFont:forWidth:lineBreakMode:  
– sizeWithFont:constrainedToSize:  
– sizeWithFont:constrainedToSize:lineBreakMode:  
– sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode:

다른 팁

UI 스레드 이외의 스레드에서 드로잉 작업을 수행 할 때 설명한 기술을 사용해야합니다. 이것은 백그라운드 스레드에서 비동기 적으로 렌더링하거나 다른 이유로 배경에 사용자 정의 그래픽을 그릴 때 CatileDlayer와 같은 것을 사용할 때 특히 중요합니다.

"간단한"그래픽을 수행 할 때 PGB에 동의하며 기본 스레드에서 실행중인 보장됩니다. 그러나 SizewithFont는 설명한 기술과 동일한 작업을 수행하고 있습니다. 단순히 UigraphicsGetCurrentContext ()를 사용하여 수행하는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top