2010-10-10 55 views
9

Tôi có thể vẽ văn bản đa dạng với Văn bản lõi, vấn đề đặt hình ảnh đang chảy với văn bản. (iOS SDK 4.1)Làm thế nào để vẽ hình ảnh giữa các văn bản đa dạng với CoreText? (iOS)

Tôi đang cố gắng vẽ một số loại văn bản phong phú. Vấn đề là nhà thiết kế đặt nhiều biểu tượng giữa các văn bản. Vì vậy, các văn bản những gì tôi phải vẽ là một cái gì đó như thế này:

Here is a word <an icon image>, and another words. 
The image(<another icon>) should be placed like a glyph. 
It's part of text, not an example. 

<icon> là những hình ảnh. (Đây không phải là mã. Chỉ cần minh họa.)

Tôi có thể vẽ bằng cách đặt tất cả chúng theo cách thủ công, nhưng quá khó để giữ các hành vi bố cục văn bản phức tạp. Vì vậy, tôi đang tìm cách để rút ra điều này với Core Text.

Trả lời

9

Tôi đã nhận được giải pháp.

Chìa khóa của việc đặt nội dung không phải là văn bản là CTRunDelegate. Core Text không hỗ trợ nội dung không phải văn bản, vì vậy bạn phải tạo khoảng trống cho chúng và tự vẽ hoặc đặt chúng sau này.

Một phần của NSAttributedString được gán với kCTRunDelegateAttributeName sẽ gọi cuộc gọi lại đã đăng ký để xác định chiều rộng của từng hình tượng. Điều này sẽ cho phép bạn tạo khoảng trống cho mỗi đối tượng không phải văn bản.

Tuy nhiên, sau khi vẽ văn bản với Core Text, thông tin bố cục được lưu trữ bằng khung/đường/chạy sẽ bị vô hiệu. Vì vậy, bạn phải vẽ/đặt nội dung không phải văn bản sau khi bố cục với framesetter/typesetter, nhưng trước khi vẽ.

liên kết này mô tả cách sử dụng cơ bản của CTRunDelegate:
How to use CTRunDelegate in iPad?


Có một vấn đề với Core Text. Ban đầu, CTRunDelegate được thiết kế để hỗ trợ chiều rộng thay đổi và căn chỉnh theo chiều dọc qua CTRunDelegateCallbacks.getAscentCTRunDelegateCallbacks.getDescent. Nhưng tính năng căn chỉnh theo chiều dọc hiện không hoạt động. Đây có thể là một lỗi.

tôi đã mô tả vấn đề này ở đây: Aligning multiple sized text vertical center instead of baseline with Core Text in iOS

Nếu bạn có thông tin về vấn đề này, vui lòng xem câu hỏi của tôi tại liên kết.

3

Bạn chỉ cần đặt đại biểu cho CTRun nhất định và đối tượng ủy quyền chịu trách nhiệm cho biết Core Text là không gian tăng trưởng CTRun, không gian gốc và chiều rộng.

Khi văn bản chính "tiếp cận" CTRun có CTRunDelegate, nó sẽ hỏi đại biểu - tôi nên để lại bao nhiêu chiều rộng cho đoạn dữ liệu này, mức độ cao bao nhiêu? Bằng cách này bạn xây dựng một lỗ hổng trong văn bản - sau đó bạn vẽ hình ảnh của bạn ở vị trí đó.

enter image description here

Dưới đây là một blog về Core Text.It có câu trả lời cho bạn.

How To Create a Simple Magazine App with Core Text

Các vấn đề liên quan