Skip to content
Меню
ЗВЁЗДНЫЕ ВОЙНЫ ЭНЦИКЛОПЕДИЯ РОЛЕВОЙ ИГРЫ
  • Рисование
  • Советы начинающим
  • Как рисовать
  • Карандашом
  • Поэтапно
  • Уроки
ЗВЁЗДНЫЕ ВОЙНЫ
Главная » Разное » Как нарисовать рисунок простой рисунок: Как нарисовать пейзаж Легко | Простые рисунки — YouTube

Как нарисовать рисунок простой рисунок: Как нарисовать пейзаж Легко | Простые рисунки — YouTube

Posted on 03.04.202320.02.2023

Содержание

  • Как сделать рисунок на кофе
    • Что нужно для латте арта?
    • Главное для рисунка – пена
    • Как сделать рисунок на кофе: 3 идеи и инструкции
      • Сердце
      • Розетка, она же растение, листики
      • Шоколадная звездочка, снежинка
    • Как сделать рисунок на кофе, если пенка не взбивается
    • Выводы:
        • Добавить комментарий
  • Простое рисование с черепахой — Введение в программирование на Python черепаха, чтобы нарисовать все это!
    • Рисование квадрата
      • Упражнение
      • Решение
      • Бонус
    • Рисование прямоугольника
      • Упражнение
      • Решение
      • Бонус
    • Больше квадратов
      • Упражнение
      • Раствор
  • Учебное пособие по рисованию UIKit: как создать простое приложение для рисования
    • Начало работы
    • Быстрое рисование
    • Добавление цветов
    • Возврат к Tabula Rasa
    • Добавление завершающих штрихов — Настройки
    • Интеграция настроек
    • Завершающие штрихи — выбор пользовательского цвета
    • Добавление общего доступа
    • Куда идти дальше?

Как сделать рисунок на кофе

Автор: Алена Рогозинская

Просмотров: 30532

Все любители кофе знают эту радость, когда бариста подает чашечку латте с рисунком. Это неожиданно и приятно, и особенно весело, когда компании предлагают разные изображения, при этом нарисованные так легко, казалось бы, несколькими движениями руки, походя. Что ж, вы тоже можете изучить, как сделать рисунок на кофе, и освоить латте-арт. Правда, для этого придется потренироваться, и выпить (или угостить друзей) большим количеством кофе. Но зато потом вы сможете тоже удивлять и радовать своих гостей.

Что нужно для латте арта?

Чтобы сделать рисунок на кофе, вам нужна кофемашина с функцией взбивания молока. Просто так, венчиком, вы его не взобьете. Простыми взбивалками на батарейках – тоже сложно, по крайней мере, пока у вас нет опыта.

Мы расскажем о способах, доступных вам в таких условиях, но позже. Сначала все же разберемся с традиционным способом. Берем:

  • Качественное молоко, лучше 3,5%. Чем больше жирности, тем более крепкая пена получится;
  • Кофе – не берите самый лучший, пока вы научитесь – испортите довольно много продукта, а пить столько эспрессо за короткое время – вредно;
  • Питчер, кувшинчик из нержавеющей стали для взбивания. Можно и любой другой, но с этим вы точно почувствуете нужную температуру и сможете взбить молоко до нужной степени. Нужен именно кувшин, металлическая миска не подойдет;
  • Чашка, желательно круглая;
  • Зубочистка или специальная деревянная палочка потолще;
  • Эспрессо-машина;
  • Сироп, желательно шоколадный (не для всех рецептов).

Главное для рисунка – пена

Вам нужно сделать идеальную сливочную молочную пену, которая создаст «подушку» для рисования, основу, на которой потом будет держаться белый рисунок.

Во-первых, вам нужно холодное молоко, и не нагревайте его до пропаривания. Когда дело доходит до латте, обычно используется цельное жирное молоко – обезжиренное для начинающих точно не подойдет. Налейте молоко в кувшин и опустите туда стимер – устройство для взбивания, но будьте осторожны, не поднимайте его слишком высоко. Если вы видите большие пузырьки, это означает, что стимер слишком высоко.

Придерживайте кувшин второй рукой – когда станет очень горячо – значит, нужная температура примерно в 60 градусов достигнута. Постучите питчером об стол, чтобы удалить большие пузырьки и сделать пенку более плотной. Немного покрутите молоко, и оно будет готово к наливанию.

Пока делаете пенку, сварите эспрессо. Вы даже можете сделать его заранее, пусть чуть остынет, это лучше, чем пенка осядет, пока вы варите кофе.

Как сделать рисунок на кофе: 3 идеи и инструкции

Итак, у вас есть круглая (не слишком плоская и не слишком высокая) чашка, в которой налита порция эспрессо. Теперь пробуем рисовать.

Сердце

Самый простой и неизменно радующий рисунок. Наклоните чашку под углом 45 градусов одной рукой, а другой вылейте молоко в центр. Кувшин надо держать высоко, чтобы молоко пролилось через слой кофе на дно чашки. Когда чашка заполнена на три четверти, немного покачайте руку (не чашку, а кувшин), затем поднесите кувшин ближе к чашке и лейте, пока не заметите появление белых кругов. В тот момент, когда чашка становится почти полной, вылейте молоко в линию от одной стороны до другой через центр.

Розетка, она же растение, листики

В сети ее называют по разному, но это те самые листики разного размера, похоже на растение или веточку. Наклоните чашку под углом около 45 градусов и начните наливать молоко, но не держите кувшин слишком близко к чашке. Убедитесь, что поток молока тонкий, так что он создает основу, когда пенка опускается на дно.

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

Шоколадная звездочка, снежинка

Чтобы предотвратить попадание сиропа на дно, вы должны сделать вашу пену толще, это будет держать ее сверху. Взбейте ее чуть сильнее. Используя сироп, нарисуйте спираль от центра кружки до края. Затем возьмите зубочистку или что-то немного толще, а затем потяните линии от центра к краю. Сделайте пять полосок, чтобы это было похоже на звезду. Затем между этими линиями сделайте линии от края до центра. Готово! Не забывайте после каждой линии вытирать кончик зубочистки салфеткой.

Сироп должен быть в бутылочке с тонким носиком, не жидкий, не в стеклянных бутылках с порционным дозатором.

По толстой подушке пены можно рисовать шоколадом что угодно, писать надписи. А еще можно сделать веточку:

Нарисуйте змейку по краю половины чашки и протяните зубочисткой – получится веточка растения. А в центре можно нарисовать окружной, и протянув зубочисткой, получить сердечко.

Как сделать рисунок на кофе, если пенка не взбивается

Не переживайте, вы и так сможете украсить напиток. Для этого вам понадобится трафарет – его легко можно сделать из любой бумаги. Вырежьте сердечко или что-то посложнее, можно сгибать бумагу, чтобы получилось симметрично.

  • Натрите шоколад или возьмите корицу.
  • Держа трафарет над чашкой, насыпьте декор.
  • Даже если пенка откровенно слабая, вы сделаете напиток интересным и красивым.

Пробуйте, экспериментируйте, и вы сможете сделать рисунок на кофе.

Выводы:

  1. Чтобы сделать рисунок на кофе, главное – взбить крепкую пену, на основе которой и будет держаться белый слой рисунка.
  2. Пену проще всего взбить стимером в питчере.
  3. Наливать сначала под углом 45 градусов, потом выровнять чашку и наливать, пока не будет виден белый круг, затем рисуйте, двигая кувшин.
  4. На хорошо взбитой пене отлично держится шоколадный или любой темный сироп.
  5. В крайнем случае, нарисовать сердечко можно через трафарет, посыпав через него корицу.

Понравился сайт — поделитесь ссылкой с друзьями. Спасибо!


Добавить комментарий

Простое рисование с черепахой — Введение в программирование на Python черепаха, чтобы нарисовать все это!

Вы можете использовать такие функции, как черепаха.вперед(...) и черепаха.влево(...) который может перемещать черепаху.

Прежде чем вы сможете использовать черепаху, вы должны импортировать ее. Мы рекомендуем поиграть сначала с ним в интерактивном интерпретаторе, так как есть дополнительная работа требуется, чтобы заставить его работать из файлов. Просто зайдите в свой терминал и введите:

 импортная черепаха
 

Примечание

Ничего не видно в Mac OS? Попробуйте ввести команду типа

черепаха.форвард(0) и смотрим, открылось ли новое окно позади вашего командная строка.

Примечание

Вы работаете с Ubuntu и получаете сообщение об ошибке «Нет модуля с именем _ткинтер»? Установите отсутствующий пакет с помощью sudo apt-get install python3-tk

Note

Хотя может возникнуть соблазн просто скопировать и вставить то, что написано на эту страницу в свой терминал, мы рекомендуем вам ввести каждую команду. При наборе текста синтаксис у вас под рукой (наращивание мышечной памяти!) и даже может помочь избежать странных синтаксических ошибок.

 черепаха.вперед(25)
 
 черепаха.левая(30)
 

Функция turtle.forward(...) сообщает черепашке двигаться вперед по заданному расстоянию. turtle.left(...) принимает количество степеней, которые вы хотите повернуть налево.

Также есть черепаха.назад(...) и черепаха.право(...) тоже.

Примечание

Хотите начать все заново? Вы можете набрать turtle.reset() , чтобы очистить рисунок. что твоя черепаха сделал до сих пор. Мы остановимся подробнее на черепаха.reset() совсем немного.

Стандартная черепаха представляет собой просто треугольник. Это не весело! Давайте сделаем черепаху вместо этого с помощью команды черепаха.форма() :

 черепаха.форма("черепаха")
 

Так милее!

Если вы поместите команды в файл, вы, возможно, узнаете, что черепаха Окно исчезает после того, как черепаха закончила свое движение. (Это потому Python завершает работу, когда ваша черепаха заканчивает движение. С черепашьего окна принадлежит Python, он также исчезает.) Чтобы предотвратить это, просто поместите черепаха.exitonclick()

внизу вашего файла. Теперь окно остается открытым пока вы не нажмете на него:

 импортировать черепаху
черепаха. форма("черепаха")
черепаха.вперед(25)
черепаха.exitonclick()
 

Примечание

Python — это язык программирования, в котором горизонтальный отступ текста важный. Мы узнаем все об этом позже в главе «Функции». но пока просто имейте в виду, что пробелы или табуляции перед любой строкой кода Python может вызвать непредвиденную ошибку. Вы даже можете попробовать добавить один чтобы проверить, как python будет жаловаться!

Рисование квадрата

Примечание

Не всегда ожидается, что ответ будет известен сразу. Узнать по методом проб и ошибок! Поэкспериментируйте, посмотрите, что делает python, когда вы ему говорите разные вещи, что дает красивое (хотя иногда неожиданные) результаты и что дает ошибки. Если вы хотите сохранить играя с чем-то, что вы узнали, что создает интересные результаты, это тоже нормально. Не стесняйтесь пробовать, ошибаться и учиться от него!

Упражнение

Нарисуйте квадрат, как показано на следующем рисунке:

Для квадрата вам, вероятно, понадобится прямой угол, равный 90 градусам.

Решение

 черепаха.вперед(50)
черепаха.слева(90)
черепаха.вперед(50)
черепаха.слева(90)
черепаха.вперед(50)
черепаха.слева(90)
черепаха.вперед(50)
черепаха.слева(90)
 

Примечание

Обратите внимание, что черепаха начинает и заканчивает в одном и том же месте и лицом в одном направлении, до и после рисования квадрат. Это полезное соглашение, которому стоит следовать, оно упрощает для рисования нескольких фигур позже.

Бонус

Если вы хотите проявить творческий подход, вы можете изменить свою форму с помощью черепаха.ширина(...) и черепаха.цвет(...) функций. Как ты использовать эти функции? Прежде чем вы сможете использовать функцию, вам нужно знать его подпись (например что ставить между скобками и какие те вещи означают.) Чтобы узнать это, вы можете ввести help(turtle.color)

в Оболочка питона. Если текста много, Python поместит текст справки в пейджер , который позволяет листать вверх и вниз. Нажмите q клавишу для выхода из пейджера.

Совет

Вы видите такую ​​ошибку:

 NameError: имя «черепаха» не определено
 

при попытке просмотреть справку? В Python вы должны импортировать имена, прежде чем вы на них можно ссылаться, поэтому в новой интерактивной оболочке Python вам потребуется импортировать черепаху до help(turtle.color) будет работать.

Еще один способ узнать о функциях — просмотреть онлайн-документацию.

Осторожно

Если вы что-то неправильно нарисовали, вы можете сказать черепашке, чтобы она стерла свой чертежный стол. с помощью директивы turtle.reset() или отменить последний шаг с помощью черепаха.отменить() .

Совет

Как вы могли прочитать в справке, вы можете изменить цвет с помощью черепаха.цвет( colorstring ) . К ним относятся, но не ограничиваются «красный», «зеленый» и «фиолетовый». Подробную информацию см. в этом руководстве по цветам. список.

Если вы хотите установить значение RGB, обязательно запустите черепаха.colormode(255) первый. Затем, например, вы можете запустить черепаху.цвет (215, 100, 170) для установите розовый цвет.

Рисование прямоугольника

Упражнение

Вы тоже можете нарисовать прямоугольник?

Решение

 черепаха.вперед(100)
черепаха.слева(90)
черепаха.вперед(50)
черепаха.слева(90)
черепаха.вперед(100)
черепаха.слева(90)
черепаха.вперед(50)
черепаха.слева(90)
 

Бонус

Как насчет треугольника? В равностороннем треугольнике (треугольнике со всеми стороны одинаковой длины) каждый угол имеет угол 60 градусов.

Больше квадратов

Упражнение

Теперь нарисуйте наклонный квадрат. И еще один, и еще один. Ты можешь поэкспериментируйте с углами между отдельными квадратами.

На рисунке показаны три поворота на 20 градусов. Но вы можете попробовать 20, 30 и 40 градусов обороты, например.

Раствор

 черепаха.левая(20)
черепаха.вперед(50)
черепаха.слева(90)
черепаха.вперед(50)
черепаха.слева(90)
черепаха.вперед(50)
черепаха.слева(90)
черепаха.вперед(50)
черепаха.слева(90)
черепаха.слева(30)
черепаха.вперед(50)
черепаха.слева(90)
черепаха.вперед(50)
черепаха.слева(90)
черепаха.вперед(50)
черепаха.слева(90)
черепаха.вперед(50)
черепаха.слева(90)
черепаха.слева(40)
черепаха.вперед(50)
черепаха.слева(90)
черепаха.вперед(50)
черепаха.слева(90)
черепаха.вперед(50)
черепаха.слева(90)
черепаха.вперед(50)
черепаха.слева(90)
 

Учебное пособие по рисованию UIKit: как создать простое приложение для рисования

Примечание об обновлении

: Рон Клиффер обновил это руководство для Xcode 10, Swift 4.2 и iOS 12. Абдул Азим Хан написал оригинал, а Жан-Пьер Дистлер завершил предыдущее обновление .

На каком-то этапе жизни нам всем нравилось рисовать картинки, мультфильмы и другие вещи.

Для меня это была ручка и бумага, но в наши дни старую ручку и бумагу заменили компьютеры и мобильные устройства! Рисование может быть особенно увлекательным на сенсорных устройствах, как вы можете видеть по обилию приложений для рисования в App Store.

Хотите научиться создавать собственные приложения для рисования? Хорошей новостью является то, что это довольно просто благодаря некоторым замечательным API для рисования, доступным через UIKit в iOS.

В этом уроке вы создадите приложение, очень похожее на Color Pad для iPhone. В процессе вы научитесь:

  • Рисовать линии и штрихи с помощью Quartz2D.
  • Используйте несколько цветов.
  • Установите ширину и непрозрачность мазка кисти.
  • Создайте ластик.
  • Создайте пользовательский селектор цвета RGB.
  • Поделись своим рисунком!

Берите карандаши и начинайте; нет необходимости делать это введение слишком нарисовано ! :]

Начало работы

Используйте кнопку Загрузить материалы вверху или внизу этого руководства, чтобы загрузить начальный проект.

Запустите Xcode, откройте начальный проект и посмотрите на файлы внутри. Как видите, для вас сделано не так много работы. У вас есть все необходимые изображения в каталоге ресурсов и основной вид приложения со всеми необходимыми ограничениями. Весь проект основан на шаблоне Single View Application .

Откройте Main.storyboard и посмотрите на интерфейс. Исходная сцена ViewController имеет три кнопки вверху. Как следует из названий, вы будете использовать их для сброса или совместного использования рисунка, а также для вызова экрана настроек. Внизу вы можете увидеть больше кнопок с изображениями карандашей и ластиком. Вы будете использовать их для выбора предопределенных цветов.

Наконец, есть два вида изображений, которые называются MainImageView и TempImageView . Позже вы поймете, зачем нужны два вида изображений, когда вы используете их, чтобы пользователи могли рисовать с разными уровнями непрозрачности кисти.

Окно View Controller имеет действия и выходы, настроенные так, как вы ожидаете: у каждой кнопки вверху есть действие, все цвета карандаша связаны с одним и тем же действием — у них разные теги, установленные для их отличия — и есть выходы для просмотра двух изображений.

Чтобы ваш внутренний художник засиял, вам нужно добавить код!

Быстрое рисование

Вы начнете с простой функции рисования, с помощью которой вы можете проводить пальцем по экрану, чтобы рисовать простые черные линии. Эй, даже Пикассо начинал с азов!

Откройте ViewController.swift и добавьте в класс следующие свойства:

вар lastPoint = CGPoint.zero
переменная цвета = UIColor.black
переменная кистьWidth: CGFloat = 10.0
переменная непрозрачность: CGFloat = 1.0
вар смахнул = ложь
 

Вот краткое объяснение этих переменных:

  • lastPoint хранит последнюю нарисованную точку на холсте. Это понадобится вам, когда ваш пользователь рисует непрерывный мазок кистью на холсте.
  • color сохраняет текущий выбранный цвет. По умолчанию черный.
  • brushWidth хранит ширину мазка кисти. По умолчанию 10.0.
  • opacity хранит непрозрачность кисти. По умолчанию 1.0.
  • пролистнул указывает, является ли мазок кистью непрерывным.

Теперь для рисования! Все методы уведомления о касании исходят из родительского класса UIResponder ; они срабатывают в ответ на начало, движение или окончание прикосновения. Вы будете использовать эти три метода для реализации логики рисования.

Начните с добавления следующего метода:

переопределить func touchesBegan(_ touches: Set, с событием: UIEvent?) {
  охрана пусть коснется = touches.first иначе {
    возвращаться
  }
  смахнул = ложь
  lastPoint = touch.location (в: вид)
}
 

Система вызывает touchesBegan(_:with:) , когда пользователь кладет палец на экран. Это начало рисования, поэтому сначала убедитесь, что вы действительно получили прикосновение. Затем вы сбрасываете провел пальцем по false , так как касание еще не сдвинулось. Вы также сохраняете местоположение касания в lastPoint , поэтому, когда пользователь начинает рисовать, вы можете отслеживать, где начался штрих. Это, так сказать, место, где кисть касается бумаги. :]

Далее добавьте следующие два метода:

func drawLine (от fromPoint: CGPoint до toPoint: CGPoint) {
  // 1
  UIGraphicsBeginImageContext(view.frame.size)
  охранять пусть контекст = UIGraphicsGetCurrentContext() else {
    возвращаться
  }
  tempImageView.image?.draw(в: view.bounds)
    
  // 2
  context.move (в: fromPoint)
  context.addLine(к: toPoint)
  
  // 3
  context.setLineCap(.round)
  context.setBlendMode(.нормальный)
  context.setLineWidth (ширина кисти)
  context.setStrokeColor(color.cgColor)
  
  // 4
  контекст.strokePath()
  
  // 5
  tempImageView.image = UIGraphicsGetImageFromCurrentImageContext()
  tempImageView.alpha = непрозрачность
  UIGraphicsEndImageContext()
}

переопределить func touchesMoved(_ touches: Set, с событием: UIEvent?) {
  охрана пусть коснется = touches.first иначе {
    возвращаться
  }

  // 6
  смахнул = правда
  пусть currentPoint = touch. location (в: вид)
  DrawLine (от: lastPoint до: currentPoint)
    
  // 7
  последняя точка = текущая точка
}
 

Вот что происходит в этих методах:

  1. Первый метод отвечает за рисование линии между двумя точками. Помните, что это приложение имеет два вида изображения: mainImageView , который содержит «рисунок на данный момент», и tempImageView , который содержит «линию, которую вы сейчас рисуете». Здесь вы хотите рисовать в tempImageView , поэтому вам нужно настроить контекст рисования с изображением, которое в настоящее время находится в tempImageView , которое должно быть пустым в первый раз.
  2. Затем вы получаете текущую точку касания и рисуете линию от lastPoint до currentPoint . Вы можете подумать, что этот подход создаст ряд прямых линий, а результат будет выглядеть как набор зубчатых линий. Этот будет производить прямые линии, но события касания запускаются так быстро, что линии становятся достаточно короткими, и результат будет выглядеть как красивая плавная кривая.
  3. Здесь вы устанавливаете некоторые параметры рисования для размера кисти и цвета обводки. Если вам интересно узнать об этом больше, ознакомьтесь с документацией Apple по CGContext.
  4. Здесь происходит волшебство, и здесь вы на самом деле рисуете путь!
  5. Далее вам нужно обернуть контекст рисования, чтобы отобразить новую линию во временном представлении изображения. Вы получаете графическое представление контекста и устанавливаете его в свойство image tempImageView .
  6. Система вызывает touchesMoved(_:with:) , когда пользователь проводит пальцем по экрану. Здесь вы устанавливаете swiped в значение true, чтобы вы могли отслеживать, выполняется ли текущее считывание. Так как это touchesMoved , ответ да, идет свайп! Затем вы вызываете только что написанный вспомогательный метод для рисования линии.
  7. Наконец, вы обновляете lastPoint , чтобы следующее событие касания продолжалось с того места, на котором вы только что остановились.

Затем добавьте обработчик последнего штриха:

переопределить func touchesEnded(_ touches: Set, с событием: UIEvent?) {
  если! смахнул {
    // рисуем одну точку
    DrawLine (от: lastPoint до: lastPoint)
  }
    
  // Объединяем tempImageView с mainImageView
  UIGraphicsBeginImageContext(mainImageView.frame.size)
  mainImageView.image?.draw(в: view.bounds, blendMode: .normal, альфа: 1.0)
  tempImageView?.image?.draw(в: view.bounds, blendMode: .normal, альфа: непрозрачность)
  mainImageView.image = UIGraphicsGetImageFromCurrentImageContext()
  UIGraphicsEndImageContext()
    
  tempImageView.image = ноль
}
 

iOS вызывает touchesEnded(_:with:) , когда пользователь убирает палец с экрана. Здесь вы сначала проверяете, находится ли пользователь в середине свайпа. Если нет, то это означает, что пользователь просто коснулся экрана, чтобы нарисовать одну точку. В этом случае просто нарисуйте одну точку, используя вспомогательный метод, который вы написали ранее.

Если пользователь находился в середине свайпа, это означает, что вы можете пропустить рисование этой единственной точки — так как touchesMoved(_:with:) был вызван ранее, вам не нужно рисовать дальше.

Последним шагом является объединение tempImageView с mainImageView . Вы нарисовали мазок на tempImageView , а не на mainImageView . Какой смысл в дополнительном UIImageView ; вы не можете просто рисовать прямо на mainImageView ?

Можно, но двойное изображение используется для сохранения прозрачности. Когда вы рисуете на tempImageView , непрозрачность устанавливается на 1,0 (полностью непрозрачная). Однако, когда вы объединяете tempImageView с mainImageView , вы можете установить непрозрачность tempImageView на сконфигурированное значение, таким образом придав мазку кисти желаемую непрозрачность. Если бы вы рисовали непосредственно на mainImageView , было бы невероятно сложно рисовать мазки кистью с разными значениями непрозрачности.

Ладно, пора рисовать! Создайте и запустите свое приложение. Вы увидите, что теперь можете рисовать красивые черные линии на холсте!

Отличное начало! Только с этими методами обработки касаний у вас есть огромное количество функциональных возможностей. Теперь пришло время добавить еще несколько вариантов, начиная с цвета.

Добавление цветов

Пришло время добавить в сцену немного цвета — один только штриховой рисунок выглядит уныло.

В данный момент на экране 10 цветных кнопок, но если сейчас нажать любую кнопку, ничего не происходит. Чтобы это заработало, сначала вам нужно определить все цвета.

Открыть Pencil.swift . Pencil — это перечисление , представляющее различные варианты цвета, которые пользователь может выбрать. Он имеет один инициализатор init?(tag:) который принимает кнопку тег и превращает ее в нужный карандаш. Добавьте следующее вычисляемое свойство к Pencil :

цвет переменной: UIColor {
  переключиться на себя {
  случай . черный:
    вернуть .черный
  чехол .серый:
    вернуть UIColor (белый: 105/255,0, альфа: 1,0)
  чехол .красный:
    вернуть UIColor (красный: 1, зеленый: 0, синий: 0, альфа: 1.0)
  чехол .darkblue:
    вернуть UIColor (красный: 0, зеленый: 0, синий: 1, альфа: 1.0)
  чехол .lightBlue:
    вернуть UIColor (красный: 51/255,0, зеленый: 204/255,0, синий: 1, альфа: 1,0)
  чехол .darkGreen:
    вернуть UIColor (красный: 102/255,0, зеленый: 204/255,0, синий: 0, альфа: 1,0)
  чехол .lightGreen:
    вернуть UIColor (красный: 102/255,0, зеленый: 1, синий: 0, альфа: 1,0)
  чехол .коричневый:
    вернуть UIColor (красный: 160/255,0, зеленый: 82/255,0, синий: 45/255,0, альфа: 1,0)
  чехол .оранжевый:
    вернуть UIColor (красный: 1, зеленый: 102/255,0, синий: 0, альфа: 1,0)
  случай .желтый:
    вернуть UIColor (красный: 1, зеленый: 1, синий: 0, альфа: 1.0)
  случай .ластик:
    вернуть .белый
  }
}
 

Возвращает соответствующий UIColor для каждого выбранного карандаша.

Затем откройте ViewController.swift , добавьте следующее в карандашПрессед(_:) :

// 1
охранять пусть карандаш = Карандаш(тег: sender.tag) еще {
  возвращаться
}

// 2
цвет = карандаш.цвет

// 3
если карандаш == .ластик {
  непрозрачность = 1,0
}
 

Рассмотрим это шаг за шагом:

  1. Во-первых, вам нужно знать, какой индекс цвета выбрал пользователь. Во многих случаях это может пойти не так, например, при использовании неправильного тега или тега, который не установлен, так что вы защищаете от несоответствия Карандаш .
  2. Затем вы устанавливаете цвет рисунка на цвет, выбранный пользователем.
  3. Последний цвет — это ластик, так что он немного особенный. Кнопка ластика устанавливает белый цвет и непрозрачность 1,0. Поскольку цвет вашего фона также белый, это даст вам очень удобный эффект ластика!

Что? Уже пора рисовать? Ага — стройте и запускайте, и будьте готовы позволить цветам летать. Теперь нажатие на цветную кнопку изменяет мазок кисти, чтобы использовать цвет этой кнопки. Больше никаких унылых штриховых рисунков!

Возврат к Tabula Rasa

У всех великих художников бывают моменты, когда они отступают назад и качают головой, бормоча: «Нет! Нет! Этого никогда не будет!» Вы захотите предоставить способ очистить холст для рисования и начать все сначала. Для этого в вашем приложении уже настроена кнопка сброса.

В ViewController.swift добавьте следующее к resetPressed(_:) :

mainImageView.image = ноль
 

Верьте или нет! Весь приведенный выше код устанавливает значение mainImageView изображение на nil и вуаля! Ваш холст очищен! Помните, вы нарисовали линии в контексте изображения представления изображения, поэтому очистка этого значения до нуля приведет к сбросу всего.

Снова соберите и запустите свой код. Нарисуйте что-нибудь, а затем нажмите кнопку Сбросить , чтобы очистить рисунок. Там! Не нужно в отчаянии рвать холсты.

Добавление завершающих штрихов — Настройки

Теперь у вас есть функциональное приложение для рисования, но еще есть второй экран настроек, с которым нужно работать.

Откройте Main.storyboard и щелкните сцену Settings View Controller . Сцена настроек имеет пять компонентов UISlider для установки ширины кисти, непрозрачности кисти и значений цвета RGB кисти. Вы также можете увидеть UIImageView , который показывает предварительный просмотр, созданный из всех выбранных значений.

Теперь откройте SettingsViewController.swift и добавьте в класс следующие свойства:

переменная кисть: CGFloat = 10.0
переменная непрозрачность: CGFloat = 1.0
переменная красная: CGFloat = 0.0
переменная зеленого цвета: CGFloat = 0,0
переменная синего цвета: CGFloat = 0,0
 

Это позволит вам отслеживать размер кисти, непрозрачность и цвет, которые выбирает пользователь.

Затем добавьте следующий метод:

функция drawPreview () {
  UIGraphicsBeginImageContext (previewImageView.frame.size)
  охранять пусть контекст = UIGraphicsGetCurrentContext() else {
    возвращаться
  }
    
  context.setLineCap(.round)
  context.setLineWidth(кисть)
  context.setStrokeColor (UIColor (красный: красный,
                                 зеленый: зеленый,
                                 синий: синий,
                                 альфа: непрозрачность).cgColor)
  context.move (к: CGPoint (x: 45, y: 45))
  context.addLine (к: CGPoint (x: 45, y: 45))
  контекст.strokePath()
  previewImageView.image = UIGraphicsGetImageFromCurrentImageContext()
  UIGraphicsEndImageContext()
}
 

Этот метод использует те же методы для предварительного просмотра настроек, которые drawLine(from:to:) использовали в ViewController . Однако в этом случае метод рисует одну точку, а не линию с соответствующей шириной и непрозрачностью линии из значений ползунка.

Затем добавьте следующее в brushChanged(_:) :

кисть = CGFloat (sender.value)
labelBrush.text = Строка (формат: "%.1f", кисть)
рисоватьПредварительный просмотр()
 

и добавьте следующее к opacityChanged(_:) :

непрозрачность = CGFloat (sender.value)
labelOpacity.text = Строка (формат: "%.1f", непрозрачность)
рисоватьПредварительный просмотр()
 

В приведенном выше коде, когда пользователь изменяет значения ползунка, вам необходимо соответствующим образом установить соответствующие значения, а затем обновить изображение предварительного просмотра, вызвав drawPreview() .

Соберите и запустите, откройте экран настроек и поэкспериментируйте с ползунками. Вы увидите, что теперь изображение предварительного просмотра и метки значений меняются при их перемещении! Ползунки цвета пока не работают, но вы скоро к ним вернетесь.

Интеграция настроек

Здесь не хватает еще одного важного элемента. Вы заметили, что это было?

Обновленные значения непрозрачности и ширины по-прежнему не применяются к холсту для рисования ViewController ! Это потому, что вы еще не передали значения, указанные на экране настроек, в ViewController. Это идеальная работа для протокола делегата.

Откройте SettingsViewController.swift и добавьте следующий код сразу после импорта:

протокол SettingsViewControllerDelegate: класс {
  func settingsViewControllerFinished(_ settingsViewController: SettingsViewController)
}
 

Определяет протокол класса с одним обязательным методом. Экран настроек будет использовать это для обратной связи с любой стороной, заинтересованной в обновленных настройках.

Также добавьте свойство в SettingsViewController :

слабый делегат var: SettingsViewControllerDelegate?
 

Это будет содержать ссылку на делегата. Если есть делегат, вам нужно будет уведомить его, когда пользователь нажмет кнопку Закрыть . Добавьте следующее в closePressed(_:) :

делегат?.settingsViewControllerFinished(self)
 

Это вызывает метод делегата, чтобы он мог обновить делегат новыми значениями.

Теперь откройте ViewController.swift и добавьте новое расширение класса для протокола в конец файла:

// ПОМЕТКА: - SettingsViewControllerDelegate

расширение ViewController: SettingsViewControllerDelegate {
  func settingsViewControllerFinished(_ settingsViewController: SettingsViewController) {
    ширина кисти = настройкиViewController.brush
    непрозрачность = settingsViewController.opacity
    уволить (анимированный: правда)
  }
}
 

Это объявляет класс соответствующим SettingsViewControllerDelegate и реализует его единственный метод. В реализации все, что нужно сделать, это установить текущую ширину и непрозрачность кисти в значения из элементов управления ползунка представления настроек.

Когда пользователь переходит с экрана «Рисование» на экран «Настройки», вам нужно, чтобы ползунки отображали текущие выбранные значения размера и непрозрачности кисти. Это означает, что вам нужно будет передать их при открытии настроек.

Добавьте следующее переопределение метода в класс ViewController :

переопределить функцию подготовки (для перехода: UIStoryboardSegue, отправитель: Any?) {
  сторожить
    пусть navController = segue.destination как? UINavigationController,
    пусть settingsController = navController.topViewController как? НастройкиViewController
  еще {
      возвращаться
  }
  settingsController.delegate = я
  settingsController.brush = ширина кисти
  settingsController.opacity = непрозрачность
}
 

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

Сборка и запуск. На этом этапе вы увидите, что значения кисти и непрозрачности теперь обновляются после того, как вы измените их на экране настроек. Теперь вы можете рисовать разными цветами, разными размерами кистей и уровнями непрозрачности!

Завершающие штрихи — выбор пользовательского цвета

В настоящее время у вас есть 10 цветных кнопок на экране Drawing Canvas. Однако с помощью настраиваемого селектора цветов RGB у разборчивых художников, использующих ваше приложение, будет возможность выбрать любой доступный цвет из диапазона RGB.

На экране настроек есть набор ползунков цвета RGB, которые вы реализуете дальше.

Поскольку вы предоставили предварительный просмотр размера и непрозрачности кисти, вы также можете интегрировать предварительный просмотр нового цвета кисти!

В SettingsViewController.swift , добавьте следующее к colorChanged(_:) :

красный = CGFloat (sliderRed.value / 255.0)
labelRed.text = Int(sliderRed.value).description
зеленый = CGFloat (sliderGreen.value / 255,0)
labelGreen.text = Int(sliderGreen.value).description
синий = CGFloat (sliderBlue. value / 255.0)
labelBlue.text = Int(sliderBlue.value).description
    
рисоватьПредварительный просмотр()
 

iOS вызывает colorChanged(_:) при перемещении любого из ползунков RGB. Обратите внимание, что в приведенном выше коде все, что вы делаете, — это обновляете значения свойств и обновляете метки.

Теперь, когда у вас есть образцы кисти и непрозрачности со всеми правильными настройками, вы захотите отобразить их правильно, когда появится экран настроек. Добавьте следующее в конец viewDidLoad() :

sliderBrush.value = Плавающая (кисть)
labelBrush.text = Строка (формат: "%.1f", кисть)
sliderOpacity.value = Плавающая (непрозрачность)
labelOpacity.text = Строка (формат: "%.1f", непрозрачность)
sliderRed.value = Плавающая (красный * 255,0)
labelRed.text = Int(sliderRed.value).description
sliderGreen.value = Плавающая (зеленый * 255,0)
labelGreen.text = Int(sliderGreen.value).description
sliderBlue.value = Плавающая (синий * 255,0)
labelBlue. text = Int(sliderBlue.value).description
    
рисоватьПредварительный просмотр()
 

Как видите, это всего лишь предустановка всех меток и ползунков с правильными значениями. Вызов drawPreview() гарантирует, что изображение предварительного просмотра также показывает правильное изображение.

Наконец, откройте ViewController.swift . Как и раньше, вам нужно убедиться, что текущий цвет отображается на экране настроек, поэтому добавьте следующие строки в конец prepare(for:sender:) :

переменная красная: CGFloat = 0
переменная зеленого цвета: CGFloat = 0
переменная синего цвета: CGFloat = 0
color.getRed(&red, green: &green, blue: &blue, alpha: nil)
settingsController.red = красный
settingsController.green = зеленый
settingsController.blue = синий
 

Передает текущие значения красного, зеленого и синего, чтобы ползунки RGB были установлены правильно. Этот синтаксис может показаться странным, но не беспокойтесь — это функция, оставшаяся от старых дней Objective-C. Когда вы вызываете getRed(_:green:blue:alpha:) , он устанавливает переменные, которые вы передаете, со значениями компонентов из color .

Наконец, найдите settingsViewControllerFinished(_:) в расширении класса и добавьте следующие строки непосредственно перед вызовом уволить (анимировано: правда) :

цвет = UIColor (красный: settingsViewController.red,
                зеленый: settingsViewController.green,
                синий: settingsViewController.blue,
                альфа: непрозрачность)
 

Обновление цвета с использованием новых значений RGB.

Собери и запусти снова и испытай цветные ползунки. Также посмотрите, как указанный цвет RGB, который отображается в предварительном просмотре, теперь является цветом мазка кисти на холсте для рисования!

Но какой прок во всех этих замечательных произведениях искусства, если вы не можете поделиться ими со всем миром? Поскольку вы не можете повесить картинки на холодильник, вы поделитесь ими со всем миром на последнем этапе этого урока!

Добавление общего доступа

На этом последнем этапе вы будете использовать лист общего доступа iOS, чтобы отправлять свои произведения искусства в мир!

Здесь есть две части: во-первых, вам нужно получить рисунок как объект UIImage ; затем вы просто передаете его UIActivityViewController , чтобы решить, какие параметры общего доступа будут работать лучше всего, в зависимости от того, какие учетные записи и службы доступны.

В ViewController.swift добавьте следующее к sharePressed(_:) :

охранять пусть изображение = mainImageView.image еще {
  возвращаться
}
пусть активность = UIActivityViewController (ActivityItems: [изображение],
                                        applicationActivities: ноль)
присутствует (активность, анимация: правда)
 

Этот метод довольно прост. Сначала он проверяет, что mainImageView действительно имеет изображение. Затем UIActivityViewController выполняет большую часть тяжелой работы! Все, что вам нужно сделать, это передать ему множество вещей, чтобы поделиться; в данном случае это всего лишь одно изображение.

Второй параметр инициализатора applicationActivities позволяет ограничить действия, поэтому передача nil означает, что iOS предоставит максимально возможное количество вариантов общего доступа. Ваш рисунок заслуживает не меньшего!

Соберите и запустите приложение и создайте свой шедевр. Когда вы нажмете Поделиться , вы теперь сможете рассказать миру о своих талантах.

Куда идти дальше?

Вы можете загрузить завершенную версию проекта с помощью кнопки Загрузить материалы вверху или внизу этого руководства.

Вы можете немного поиграть с мазками кисти, а также изучить рисование дуг и прямоугольников с помощью Quartz2D. Хорошим началом является Руководство по программированию Quartz 2D. Там есть ряд концепций для начинающих и продвинутых, с которыми вы можете экспериментировать, создавая удивительные формы и узоры.

Если вы хотите научиться рисовать еще более плавные линии, прочтите также эту статью Кшиштофа Заблоки о рисовании плавных линий. Он основан на Cocos2D, но вы можете использовать ту же технику в UIKit.

В качестве последнего испытания попробуйте добавить возможности отмены и повтора. Ознакомьтесь с Учебным пособием UndoManager: как реализовать с типами значений Swift, опубликованным на этом веб-сайте членом команды RW Lyndsey Scott .

Добавить комментарий Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Рубрики

  • Для начинающих
  • Как рисовать
  • Карандаш
  • Поэтапно
  • Разное
  • Советы
  • Срисовка
  • Уроки
2025 © Все права защищены.