Вопрос по calayer, ios, xcode, objective-c, uiview – Укладка UIViews с режимами наложения в iOS

16

У меня два разныхUIImageViews, Я'хотел бы сделать топUIImageView смешайте в режиме смешивания экрана с нижней.UIImageView

Я знаю о собственности:CALayercompositingFilter и я знаю, что это неработать в iOS. Я'Я много искал решений, и ямы нашли, как следует подклассUIView и переопределить .I 'drawRect

мы пытались установить контекст вdrawRect в режим смешивания экрана, хотя он по-прежнему рисует каждое из изображений в обычном режиме. Возможно, я делаю что-то не так, или подход должен быть другим. Может быть, мне нужен OpenGL или CALayer для достижения этой цели. Может ли кто-нибудь помочь?

Разместите свой код. Вас также'Вам придется рисовать оба изображения в одном виде; вы можете't смешать одно представление с содержанием другого представления. Kurt Revis
@KurtRevis Я знаю, что могу рисовать два изображения в одном UIView, используя экран, который является основным рисунком в drawRect. Мне нужно было сделать это между взглядами. Если это не такпока не существует, опубликуйте это как ответ, чтобы я мог закрыть вопрос. user1114055

Ваш Ответ

1   ответ
17

нет никакого способа сделать несоставное смешивание между UIViews на iOS. UIKit не делаетобеспечить функциональность, и выВы уже заметили, CALayer может 'не делай этого тоже.

В общем, реализация -drawRect в UIView выигралаТебе помочь. Вы'рисовать в пустое растровое изображение - это неСодержит биты представлений позади него, так как они могут измениться в любое время (любой вид или слой могут быть анимированными). CA в основном предполагает, что слои содержимое должно быть независимым друг от друга.

Вымог попробуй, в твоем-drawRect:

создать контекст изображениязахватывать виды под вашим видом, используя-[CALayer renderInContext:] для каждогосоздать изображение из контекста изображениянарисуйте это изображение на ваш взглядустановить режим наложения и рисовать поверх этого

Но это будет медленно и хрупко, и выигралне работает, если вы анимируете любое из представлений. Я бы неЯ не рекомендую это.

Если вам действительно нужно это сделать, вынам придется переключить всю вашу сцену для рендеринга с OpenGL,где ты'у нас больше свободы.

На какой версии iOS этот ответ актуален? William Entriken
Может представлять интерес:stackoverflow.com/questions/3410350/mixing-opengl-and-uikit nielsbot
Закадровый рендеринг UIViews придется использовать-[CALayer renderInContext:] как я описал. Но да, вы могли бы затем нарисовать это в своем контексте OpenGL, а затем смешать вещи с ним. Тот же список недостатков. Kurt Revis
Был бы какой-нибудь способ добавить представление OpenGL к сцене, которое позволило бы вам комбинировать контент поверх него? Или, возможно, вы могли бы сделать рендеринг за кадром, захватить его как текстуру, а затем использовать OpenGL для рисования вашей сцены? nielsbot

Похожие вопросы