2013-01-03 31 views
15

Tôi có hai khác nhau UIImageViews. Tôi muốn làm cho sự pha trộn UIImageView hàng đầu trong chế độ hòa trộn màn hình với phần dưới cùng UIImageView.Xếp chồng UIView với chế độ hòa trộn trong iOS

Tôi biết về tài sản của CALayer: compositingFilter và tôi biết rằng nó không hoạt động trong iOS. Tôi đã tìm kiếm rất nhiều giải pháp, và tôi đã tìm ra cách để phân lớp UIView và ghi đè drawRect.

Tôi đã cố gắng đặt ngữ cảnh ở chế độ hòa trộn màn hình drawRect, mặc dù nó vẫn thu hút mọi hình ảnh bình thường. Có lẽ tôi đang làm điều gì đó sai, hoặc cách tiếp cận nên khác nhau. Có lẽ tôi cần OpenGL hoặc CALayer để đạt được điều này. Ai đó có thể hỗ trợ?

+0

Đăng mã của bạn. Ngoài ra, bạn sẽ phải vẽ cả hai hình ảnh trong một chế độ xem; bạn không thể pha trộn một chế độ xem với nội dung của chế độ xem khác. –

+0

@KurtRevis Tôi biết rằng tôi có thể vẽ hai hình ảnh trong một màn hình sử dụng UIView, đó là bản vẽ cơ bản trong drawRect. Tôi cần phải làm điều đó giữa các lượt xem. Nếu nó không tồn tại, hãy đăng câu trả lời đó để tôi có thể đóng câu hỏi. –

Trả lời

17

Rất tiếc, không có cách nào để thực hiện kết hợp không phải là hỗn hợp giữa UIViews trên iOS. UIKit không cung cấp chức năng, và bạn đã lưu ý, CALayer cũng không thể làm được.

Nói chung, việc triển khai-rút thăm trong UIView sẽ không giúp bạn. Bạn đang vẽ vào một bitmap trống - nó không chứa các bit của các khung nhìn đằng sau nó, vì chúng có thể thay đổi bất cứ lúc nào (bất kỳ khung nhìn hoặc lớp nào có thể được làm động). CA về cơ bản giả định rằng nội dung của các lớp nên độc lập với nhau.

Bạn thể cố gắng, trong bạn -drawRect:

  1. tạo ra một bối cảnh hình ảnh
  2. chụp quan điểm dưới cái nhìn của bạn sử dụng -[CALayer renderInContext:] cho mỗi
  3. tạo một hình ảnh từ bối cảnh hình ảnh
  4. hòa hình ảnh đó vào chế độ xem của bạn
  5. đặt chế độ hòa trộn và vẽ lên trên đó

Nhưng điều đó sẽ chậm và mong manh và sẽ không hoạt động nếu bạn tạo hiệu ứng cho bất kỳ chế độ xem nào. Tôi sẽ không giới thiệu nó.

Nếu bạn thực sự cần làm điều này, bạn sẽ phải chuyển toàn bộ khung cảnh của mình để hiển thị với OpenGL, where you've got more freedom.

+1

Có cách nào để thêm chế độ xem OpenGL vào cảnh có thể cho phép bạn tổng hợp nội dung không? Hoặc có lẽ bạn có thể hiển thị màn hình ngoài, chụp lại dưới dạng kết cấu và sau đó sử dụng OpenGL để vẽ cảnh của bạn? – nielsbot

+0

Hiển thị offscreen của UIViews sẽ phải sử dụng '- [CALayer renderInContext:]' như tôi đã mô tả. Nhưng có, sau đó bạn có thể vẽ nó vào bối cảnh OpenGL của bạn, sau đó pha trộn các công cụ trên nó. Cùng một danh sách các nhược điểm. –

+1

Có thể quan tâm: http://stackoverflow.com/questions/3410350/mixing-opengl-and-uikit – nielsbot

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