Стандартные вызовы Quartz, которые вы будете использовать в drawRect: на самом деле не дадут вам эффекта мелка, который вы ищете, используя любое поведение по умолчанию.
Самая простая реализация, которая поможет вам разобраться, по крайней мере, простоПриступая к работе, можно было бы создать серию прозрачных цветных текстур.В Photoshop, Fireworks и многих других приложениях для рисования уже есть кисти и стили линий для создания цветных эффектов, поэтому вы можете просто поиграть с несколькими из них на прозрачном фоне, чтобы получить несколько выполнимых «пятен» (маленькие круглые карандаши, выглядящие прозрачными PNG).
Затем, когда пользователь проводит пальцем по устройству, запишите путь и нарисуйте эти «пятна» вдоль пути.Если человек рисует взад-вперёд, больше будет положено, и вы получите более темный (более сплошной / менее прозрачный) цвет.
Это очень грубый, но общий подход к этой проблеме.Вы могли бы стать действительно умными с помощью масок, шаблонов, градиентов и других методов Quartz, но сложность доставки того, что вы хотите, вероятно, перевесит простоту подхода к изображениям.
Некоторые рекомендации, чтобы получить лучший эффектвозможные:
- Вы можете использовать HSV (Hue-Saturation-Value), чтобы создать диапазон цветовых вариаций из одного исходного набора изображений, чтобы получить различные цвета карандаша.Это может быть сделано в коде или в вашей графической программе.
- Добавление очень светлых теней серого в изображения может придать им глубину и шероховатость, которые будут сохранены, даже если вы много раз наложите изображения, исерая шкала не будет отфильтрована при настройке HSV.Это препятствует тому, чтобы карандаш стал сплошным цветом.
- Запишите свой путь, (x, y), размер, выбор "пятна" и цвет непрерывно, когда человек перетаскивает, однако, разбейте его на сегменты на основепри касании / увеличении или максимальном размере, таким образом вы можете предоставить пошаговую функциональность «отменить».
- Вы можете преобразовать «сегменты» из (3) в одно изображение, передав их ввне экрана буфера.Это позволит вам перерисовать весь фрагмент всего несколькими прозрачными изображениями вместо тысяч маленьких «пятен» каждый раз.
- Если вы знакомы с OpenGL, вы можете получить хороший прирост производительности даже для 2D, потому что он может манипулировать исходными изображениями "splotch", рендерингом за пределами экрана и наложением слоев с гораздо меньшим количеством кода, чем вы должны делать вCoreGraphics.К сожалению, установка OpenGL добавляет массу кода и может быть очень запутанной.
Надеюсь, это было достаточно ясно и дает вам некоторые идеи.
Имейте в виду, как только вы освоите этот подходВы можете рисовать с чем угодно.Вместо цветных текстур у вас может быть неоновое свечение, звезды, эффекты частиц и почти все, что вы можете себе представить.