2009-11-24 2 views
1

Я хочу добавить немного функциональности в свое приложение, и я думаю, что использование CGLayer - лучший способ сделать это, но никогда не делал никакого кварцевого рисунка раньше (кроме некоторых основных уроков).Является ли CGLayer хорошим решением?

Мое намерение состоит в том, чтобы показать полное изображение изображения, которое мое приложение будет рисовать (основные геометрические фигуры на основе параметров) в верхней половине представления, и показать увеличенную часть этого изображения в нижней четверти представление, основанное на том, где пользователь коснулся верхнего изображения. Я хочу, чтобы увеличенная часть отображалась в высоком разрешении, поэтому я думаю, что я должен нарисовать изображение на, скажем, 640 x 640 CGLayer, а затем нарисуйте этот полный слой в верхней части 320 x 320 на половину экрана (так масштабируется вниз, чтобы соответствовать), и соответствующая часть, затронутая пользователем в левом нижнем углу 160 x 160 вида, но немасштабированная, так что вы увидите четверть основного изображения.

Когда пользователь перемещает свой палец вокруг основного вида, вид части в левом нижнем углу будет перерисован из CGLayer, поэтому новый рендеринг изображения не будет выполнен, а только рисунок CGLayer.

Может ли кто-нибудь увидеть проблему с таким подходом, что мой неопытный мозг, возможно, пропустил?

Ta, Jools.

+0

Для тех, кто читает, кто нуждается в базовой информации о CGLayer, попробуйте этот вопрос ... http://stackoverflow.com/questions/4458812/whats-the-difference-and-compatibility-of-cglayer-and-calayer/4594394 # 4594394 – Fattie

ответ

2

Посмотрите на CALayer и его параметр contentRect. Это даст вам довольно простой способ сделать именно то, что вы хотите. Вы можете скопировать содержимое слоя вашей точки зрения изображения к вашему увеличенному вид слоя, как это:

[[zoomView layer] setContents:[[tapImageView layer] contents]]; 

Затем установите contentsRect так:

[[zoomView layer] setContentsRect:CGRectMake(x, y, 0.25, 0.25)]; 

Вы бы вычислить х и у, и называем это touchesMoved. Ширина и высота, которые установлены в этом коде, равны 0,25, показывают, какой процент изображения будет отображаться в увеличенном виде.

Дайте мне знать, если вам нужно уточнение.

+0

Спасибо за ваш отзыв Мэтт, это имеет смысл и выглядит как то, что мне нужно сделать - но я пытаюсь найти информацию о том, как создать исходное изображение 640x640, в первую очередь, для использования в качестве источника для уменьшенного вида и увеличенного изображения. Мое понимание CGLayers заключается в том, что они наследуют размер контекста, который вы используете при их создании, - как мне создать слой с более высоким разрешением (640x640), а затем привлечь его? Jools. – Jools

+0

Я написал несколько примеров кода, чтобы поиграть с этим. Вы можете скачать его здесь: http://www.cimgf.com/files/TapZoom.zip. Он должен иметь некоторые изломы, разработанные, но демонстрирует основные функциональные возможности, о которых я говорил. Кроме того, CGLayers - это любой размер, который вы им делаете. Каждый UIView имеет корневой уровень, а размер по умолчанию - размер его родителя. Если вы хотите создать более крупный * холст * для рисования, просто создайте более крупный UIView. –

Смежные вопросы