2011-01-15 23 views
7

Tôi có một ứng dụng iOS mà tôi đang chuyển sang ứng dụng iOS/Mac. Trong phiên bản iOS, tôi đã sử dụng UILabels cho văn bản của mình. Rõ ràng, tôi không thể làm điều đó trên mac. Tôi có thể thấy hai tùy chọn:UILabel/NSTextView so với CATextLayer

Tùy chọn 1: Sử dụng UILabels trên iOS và NSTextView trên máy Mac.

Tùy chọn 2: Sử dụng CATextLayers trên cả hai nền tảng, như là một phần của chiến lược chung để thực hiện nhiều công việc có thể trên cả hai nền tảng.

Rõ ràng, tùy chọn 2 có lợi thế lớn là sẽ có ít mã hơn để duy trì. Câu hỏi của tôi là - tùy chọn 1 có bất kỳ lợi thế nào mà tôi nên biết không? Đặc biệt, CATextLayer có những hạn chế mà UILabel và NSTextView không có?

EDIT: Đó là trò chơi. Người dùng không bao giờ nhập văn bản - nhưng trò chơi có đầu ra một số, ví dụ như điểm số.

Trả lời

10

Tùy thuộc vào cách bạn dự định sử dụng văn bản và loại ứng dụng bạn đang viết. Nếu văn bản chủ yếu là tĩnh và được sử dụng làm nhãn hoặc hộp thoại trong giao diện người dùng, thì NSTextField phải hoạt động tốt. Nếu bạn cần hình động ưa thích, thì CATextLayer có thể phù hợp hơn. Nếu bạn đang viết một trò chơi (ví dụ, solitaire), giao diện người dùng sẽ có xu hướng tương tự và sử dụng CATextLayer và CoreAnimation sẽ có ý nghĩa. Nếu bạn đang viết một ứng dụng tổng quát hơn như ứng dụng trò chuyện, giao diện và cách người dùng tương tác với ứng dụng rất khác nhau và có lẽ sẽ có ý nghĩa hơn khi sử dụng NSTextFields hoặc NSTextViews. Một lần nữa, tất cả điều này phụ thuộc vào loại ứng dụng bạn đang tạo, nhưng nếu đó là một ứng dụng truyền thống như ví dụ ứng dụng trò chuyện thì tôi sẽ nghĩ rằng sử dụng CATextLayer và phải tạo mọi thứ trong giao diện theo chương trình, thay vào đó hơn việc sử dụng NSTextField và đặt nội dung trong một tệp nib, có nghĩa là hàng trăm dòng mã. Mặt khác, nếu ứng dụng giống như ví dụ về trò chơi solitaire và kích thước của các lớp và thuộc tính được xác định theo cách tính đến nền tảng ứng dụng đang chạy, thì bạn có thể tiết kiệm rất nhiều mã .

Để lưu nội dung, NSTextField có lẽ là lớp AppKit tương đương gần nhất với UILabel. NSTextView là một lớp hạng nặng hơn mà bạn thường chỉ cần nếu bạn muốn làm đoạn văn đầy đủ và sắp xếp nâng cao hơn. Một phần của những gì làm cho trọng lượng nhẹ hơn là NSTextField là chúng có xu hướng chia sẻ một, NSTextView (hoặc siêu lớp, NSText) vô hình làm trình chỉnh sửa trường, giúp nhập văn bản. Vì chỉ có một trường văn bản trong một ứng dụng có thể tập trung cùng một lúc, nó có thể chia sẻ một trình soạn thảo trường phổ biến để giúp cải thiện hiệu suất.

1

Có một hạn chế nữa mà bạn cần phải biết (hoặc những người tương lai đến xem chuỗi này). Khi sử dụng UILabel, tất cả khả năng truy cập đều miễn phí thông qua UIAccessibility. Đối với CATextLayer, bạn sẽ cần phải tự xử lý mọi thứ: chạm vào bên trong, AccessibilityLabel, vị trí trong danh sách AccessibilityElements ...

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