Tôi đã đọc những gì tôi tin là các phần liên quan của Hướng dẫn lập trình 2D 2D, nhưng không thể tìm thấy câu trả lời cho câu hỏi sau (có vẻ như chúng không nói được rất nhiều về iOS trong tài liệu):Cách tạo một CGLayer từ UIView để vẽ ngoài màn hình
Ứng dụng của tôi hiển thị bản vẽ trong UIView
. Mỗi bây giờ và sau đó tôi phải cập nhật bản vẽ theo một cách nào đó, ví dụ: thay đổi màu tô của một trong các hình dạng (tôi giữ CGPathRefs
thành các hình dạng quan trọng để có thể vẽ lại chúng bằng một màu tô khác sau). Như đã trình bày trong mục "Vẽ Với CGLayer" trên trang 169 của tài liệu nói trên, tôi đã nghĩ đến việc vẽ toàn bộ bản vẽ thành một CGContext
rằng tôi sẽ có được từ một CGLayer
, như vậy:
CGContextRef offscreenContext = CGLayerGetContext(offscreenLayer);
Sau đó, tôi có thể làm cập nhật của tôi tắt màn hình vào CGContext
và vẽ CGLayer
vào UIView của tôi trong drawRect các 's UIView
: phương pháp, như vậy:
CGContextDrawLayerAtPoint(viewContext, CGPointZero, offscreenLayer);
vấn đề tôi đang gặp là, nơi nào tôi nhận được CGLayer
tôi từ ? Sự hiểu biết của tôi là tôi phải làm cho nó bằng cách sử dụng CGLayerCreateWithContext
và cung cấp một thông số CGContext
mà từ đó nó kế thừa hầu hết các thuộc tính của nó. Rõ ràng, bối cảnh đúng sẽ là bối cảnh của UIView
, rằng tôi nhận được với
CGContextRef viewContext = UIGraphicsGetCurrentContext();
nhưng nếu tôi không nhầm, tôi chỉ có thể nhận được rằng trong drawRect
: Phương pháp và nó không phải là hợp lệ khi cho rằng bối cảnh tôi đưa ra sẽ có cùng một lần sau khi phương thức được gọi, tức là tôi chỉ có thể sử dụng phương thức đó CGContext
cục bộ trong phương thức.
Vì vậy, làm thế nào tôi có thể nhận được một CGContext
mà tôi có thể sử dụng để khởi của tôi CGLayer
để tạo ra một offscreen CGContext
để vẽ vào và sau đó vẽ toàn bộ lớp trở lại vào UIView
tôi 's CGContext
?
PS: Trong khi bạn đang ở đó; nếu bất cứ điều gì ở trên không có ý nghĩa hoặc không lành mạnh, xin vui lòng cho tôi biết. Tôi chỉ mới bắt đầu có được đầu xung quanh Quartz 2D.
Tôi cũng bị kẹt với vấn đề CGLayer, tôi không hiểu cách viết cho nó trong các chức năng được chạm vào của tôi, bạn có thể vui lòng xem bài đăng của tôi http://stackoverflow.com/questions/11341763/how-to- sử dụng-cglayer-cho-tối ưu-vẽ – Ranjit
CGContextBeginPath() và CGContextClosePath() có một tham số của bối cảnh. – Ant