2011-01-23 54 views
16

Khi tôi vẽ đường kẻ và hình dạng, v.v ... tôi nhận được "ngữ cảnh đồ họa hiện tại" trong iOS.iOS "ngữ cảnh đồ họa hiện tại" - Điều gì là

Chính xác mặc dù là "ngữ cảnh đồ họa hiện tại" - Tôi đang tìm mô tả 30.000 foot.

Ngay bây giờ tôi chỉ cần sao chép và dán mã giao diện người dùng, không chính xác chắc chắn nó đang làm gì.

+1

Tôi không thực sự chắc chắn "mô tả chân 30.000" là gì. Bạn có nghĩa là một lời giải thích rất toàn diện và chi tiết? Đây là [tài liệu của Apple về ngữ cảnh đồ họa] (http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_overview/dq_overview.html#//apple_ref/doc/uid/TP30001066-CH202 -TPXREF131). –

+5

Một "30.000 foot view" còn được gọi là "bức tranh lớn". Ở độ cao 30.000 feet so với mặt đất, nhiều chi tiết trên mặt đất bị che khuất bằng mắt thường. Xem thêm mục nhập thứ 4 trong kết quả Google hàng đầu cho "30000 cụm từ xem chân": http://askthemanager.com/2008/11/the-25-most-annoying-business-phrases/ –

+0

Để có giải thích rõ ràng về xem rộng, hãy thử cách này ... http://stackoverflow.com/questions/4775594/what-is-a-graphic-context-ios/4776606#4776606 – Fattie

Trả lời

15

HĐH cần một nơi để lưu thông tin, chẳng hạn như trạng thái vẽ mà bạn không muốn chỉ định trong mỗi bản vẽ CG lệnh, chẳng hạn như trong đó bitmap hoặc chế độ xem cần vẽ, tỷ lệ hoặc biến đổi khác để sử dụng, màu cuối cùng bạn chỉ định, v.v.

Ngữ cảnh cho biết mỗi cuộc gọi CG sẽ tìm tất cả "nội dung" này cho bản vẽ hiện tại của bạn gọi điện. Cung cấp ngữ cảnh khác cho cùng một cuộc gọi vẽ và cuộc gọi đó có thể vẽ đến một bitmap khác trong một chế độ xem hoàn toàn khác, với màu sắc khác, thang đo khác, v.v.

1

Về cơ bản, đây là một lớp trong nền tảng (iOS, Android, JavaME và nhiều ứng dụng khác) cung cấp quyền truy cập vào tất cả các khả năng vẽ/hiển thị được cung cấp cho nền tảng đó. Nó thay đổi một chút cho các nền tảng khác nhau của khóa học, nhưng đây là mô tả chân 30.000 :)

+0

FYI, trên iOS, các chức năng liên quan đến ngữ cảnh đồ họa hiện tại là chỉ đơn thuần là các hàm tham chiếu UIKit, không phải là "các lớp". ;) –

+0

Tôi cũng đề cập đến một "ngữ cảnh" như một "trạng thái" nhiều hơn một "lớp". Tuy nhiên, một lớp có thể là một cách để thực hiện nó. –

16

Ngữ cảnh đồ họa là nơi thông tin về trạng thái vẽ được lưu trữ. Điều này bao gồm màu tô, màu nét, chiều rộng đường kẻ, mẫu đường, quy tắc quanh co, mặt nạ, đường dẫn hiện tại, các lớp trong suốt, biến đổi, biến đổi văn bản, v.v. Khi sử dụng các cuộc gọi CoreGraphics, bạn chỉ định ngữ cảnh sử dụng cho mọi chức năng. Điều này có nghĩa là bạn có thể sử dụng nhiều bối cảnh cùng một lúc, mặc dù thông thường bạn chỉ sử dụng một ngữ cảnh. Tại lớp UIKit, có khái niệm về ngữ cảnh đồ họa "hiện tại", là ngữ cảnh đồ họa được sử dụng bởi tất cả các cuộc gọi vẽ UIKit cấp (chẳng hạn như vẽ -[UIColor set] hoặc UIBezierPath). Ngữ cảnh hiện tại được lưu trữ trong một ngăn các ngữ cảnh, vì vậy bạn có thể tạo một ngữ cảnh mới cho một số bản vẽ, sau đó khi bạn hoàn thành, bối cảnh trước đó sẽ được khôi phục. Thông thường, bạn sẽ nhận được một ngữ cảnh miễn phí bên trong của -[UIView drawRect:] bên trong các phương pháp liên quan đến hiển thị CALayer, nhưng không phải là khác.

Trước đây, ngữ cảnh "hiện tại" là trạng thái toàn cầu của ứng dụng và do đó không an toàn khi chạm vào bên ngoài chuỗi chính. Theo iOS 4.0 (tôi tin), điều này đã trở thành một trạng thái thread-local và các phương thức vẽ UIKit cấp trở nên an toàn để sử dụng trên các chủ đề nền.

+0

Bạn có ý nghĩa gì khi chúng tôi nhận được bối cảnh miễn phí khi bên trong drawRect? – mskw

+0

@mskw: Nó có nghĩa là bên trong '-drawRect:', các khung công tác đã thiết lập ngữ cảnh đồ họa và đặt nó là "ngữ cảnh hiện tại", vì vậy các lệnh vẽ UIKit của bạn sẽ hoạt động mà không cần lo lắng về ngữ cảnh. Bên ngoài '-drawRect:' thường không đúng. –

+0

Nhưng bạn vẫn cần gọi hàm UIGraphicsBeginImageContextWithOptions phải không? – mskw

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