У меня есть очень интригующее препятствие для преодоления. Я пытаюсь отобразить живое содержимое UIView в другом, отдельном UIView.Предоставление предварительного просмотра UIView в другом UIView
То, что я пытаюсь выполнить, очень похоже на управление миссиями в Mac OS X. В Mission Control есть большие виды в центре, отображающие рабочий стол или приложение. Помимо этого, существуют небольшие представления, которые могут быть реорганизованы. Эти небольшие представления отображают живой просмотр соответствующего приложения. Предварительный просмотр мгновен, и частота кадров точна. В конечном счете, я пытаюсь воссоздать этот эффект, как можно дешевле.
Я пробовал множество возможных решений, и один показан here так же близко, как и я. Он работает, однако метод - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
не вызывается при каждом изменении. Моим решением было позвонить [cloneView setNeedsDisplay]
с помощью CADisplayLink, поэтому он вызывается на каждом обновлении экрана. Это очень близко к моей цели, но частота кадров крайне низкая. Я думаю, что [CALayer renderInContext:]
слишком медленный.
Если возможно, что два CALayers отображают один и тот же источник, это будет золотой. Однако я не уверен, как подойти к этому. К счастью, это просто концептуальное приложение и не предназначено для App Store, поэтому я могу использовать частные API. Я просмотрел контексты IOSurface и Quartz, но до сих пор я не смог решить эту загадку. Любой вход был бы признателен!
Есть ли причина, по которой вы не можете просто дублировать представление и обновлять его с использованием того же метода, который вы обновляете orignal? –
Да, есть. Каждое представление является чрезвычайно сложным, и для дублирования требуется очень большой объем памяти и времени. Более практичным и эффективным решением было бы просто просмотреть его. OS X делает это отлично, поэтому это должно быть как-то возможно. – eswick
Реализация управления миссией может использовать частные недокументированные API для OSX. API могут быть недоступны в iOS. OSX также может визуализироватьInContext со скоростью, которая намного выше на Mac, в то время как iOS выглядит лагги. –