Trước khi tôi hỏi câu hỏi của tôi, đây là từ tái tài liệu của Apple: làm thế nào để xác định chiều rộng của một chuỗi sử dụng thạch anh:SDK iPhone: Làm cách nào để đo chiều rộng và chiều cao của chuỗi bằng Quartz?
Nếu đo văn bản rất quan trọng để ứng dụng của bạn, nó có thể để tính toán chúng bằng thạch anh Chức năng 2D. Tuy nhiên, trước tiên bạn có thể xem xét sử dụng ATSUI, có độ mạnh là bố cục văn bản và đo lường . ATSUI có một số hàm có số liệu văn bản. Không chỉ chỉ bạn mới có thể nhận được số liệu văn bản sau bố cục, nhưng trong trường hợp hiếm hoi bạn cần chúng, bạn có thể lấy số liệu văn bản trước bố cục. Không giống như Quartz, mà bạn phải tự thực hiện các phép tính, ATSUI tính toán các phép đo cho bạn. Ví dụ: bạn có thể lấy hình chữ nhật giới hạn hình ảnh cho văn bản bằng cách gọi hàm ATSUI ATSUMeasureTextImage.
Nếu bạn quyết định rằng thạch anh văn bản phù hợp với nhu cầu của bạn tốt hơn so với ATSUI (hoặc Cocoa), bạn có thể làm theo các bước sau để đo chiều rộng của văn bản trước khi thạch anh rút nó:
- Gọi chức năng CGContextGetTextPosition để có được vị trí văn bản hiện tại.
- Đặt chế độ vẽ văn bản thành kCGTextInvisible bằng cách sử dụng hàm CGContextSetTextDrawingMode.
- Vẽ văn bản bằng cách gọi hàm CGContextShowText để vẽ văn bản tại vị trí văn bản hiện tại.
- Xác định vị trí văn bản cuối cùng bằng cách gọi hàm CGContextGetTextPosition.
- Trừ vị trí bắt đầu khỏi vị trí kết thúc để xác định chiều rộng của văn bản.
Dưới đây là những câu hỏi của tôi:
Đây có phải là thực sự là cách tốt nhất để xác định chiều rộng của một chuỗi sử dụng Core Graphics? Nó có vẻ mỏng manh và kể từ khi văn bản của tôi cùng tồn tại với các yếu tố đồ họa 2D, tôi muốn sử dụng cùng một bối cảnh cho tất cả các hiển thị. Tôi đã hy vọng sẽ có một số phương pháp nhỏ gọn, như:
CGContextGetTextWidthAndHeight (ngữ cảnh, văn bản);
Tôi đọc rằng ATSUI đã lỗi thời và sẽ được thay thế bằng Văn bản cốt lõi. Điều đó có đúng không và nếu có, nó có nằm trong SDK iPhone không?
Văn bản chính hiện được gửi trong iOS 4. Tuy nhiên, các phương thức pgb được trả lời đơn giản nhất. – Eonil