HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <p>Осваивать программирование лучше всего на практике. В этой статье мы пошагово создадим простую игру с игральными костями, а также оптимизируем её под любые диагонали экранов. Для работы вам потребуется iMac или Macbook с предустановленным Xcode. Писать приложение для iOS будем на Swift.</p>
1 <p>Осваивать программирование лучше всего на практике. В этой статье мы пошагово создадим простую игру с игральными костями, а также оптимизируем её под любые диагонали экранов. Для работы вам потребуется iMac или Macbook с предустановленным Xcode. Писать приложение для iOS будем на Swift.</p>
2 <h2>Создание проекта</h2>
2 <h2>Создание проекта</h2>
3 <p>В первую очередь следует создать новый проект: в нашем случае речь идёт об iOS-приложении "Single View Application":</p>
3 <p>В первую очередь следует создать новый проект: в нашем случае речь идёт об iOS-приложении "Single View Application":</p>
4 <p>Далее просто вводим желаемые значения:</p>
4 <p>Далее просто вводим желаемые значения:</p>
5 <p>Теперь нажимаем "Next", сохраняя проект в нужной папке. Потом в левой части экрана Xcode находим Main.Storyboard и нажимаем "Создать интерфейс пользователя".</p>
5 <p>Теперь нажимаем "Next", сохраняя проект в нужной папке. Потом в левой части экрана Xcode находим Main.Storyboard и нажимаем "Создать интерфейс пользователя".</p>
6 <p>Теперь можно переходить к следующему этапу.</p>
6 <p>Теперь можно переходить к следующему этапу.</p>
7 <h2>Интерфейс пользователя</h2>
7 <h2>Интерфейс пользователя</h2>
8 <p>Справа снизу есть панель библиотек, выбираем там вкладку "Object".</p>
8 <p>Справа снизу есть панель библиотек, выбираем там вкладку "Object".</p>
9 <p>Далее находим элемент Label, а потом перетаскиваем его на Main.Storyboard. В результате соданный вами проект должен выглядеть приблизительно следующим образом:</p>
9 <p>Далее находим элемент Label, а потом перетаскиваем его на Main.Storyboard. В результате соданный вами проект должен выглядеть приблизительно следующим образом:</p>
10 <p>На данном этапе не волнуйтесь относительно размещения элементов на экране, т. к. оптимизацией мы займёмся позже. Сейчас же введём название для элемента "The sum is:" во вкладке "Inspector Pane":</p>
10 <p>На данном этапе не волнуйтесь относительно размещения элементов на экране, т. к. оптимизацией мы займёмся позже. Сейчас же введём название для элемента "The sum is:" во вкладке "Inspector Pane":</p>
11 <p>Далее добавим в Main.Storyboard два элемента из Object, а конкретнее, Image View. После того, как добавим их на главный экран, их нужно будет сделать квадратными. В результате получим:</p>
11 <p>Далее добавим в Main.Storyboard два элемента из Object, а конкретнее, Image View. После того, как добавим их на главный экран, их нужно будет сделать квадратными. В результате получим:</p>
12 <p>Останется добавить кнопку. Чтобы это сделать, найдём элемент Button в правом нижнем углу и перетянем его на главный экран.</p>
12 <p>Останется добавить кнопку. Чтобы это сделать, найдём элемент Button в правом нижнем углу и перетянем его на главный экран.</p>
13 <p>И введём в файловом менеджере новое название для кнопки - "Roll".</p>
13 <p>И введём в файловом менеджере новое название для кнопки - "Roll".</p>
14 <h2>Используем функцию Auto Layout</h2>
14 <h2>Используем функцию Auto Layout</h2>
15 <p>Auto Layout - одна из лучших функций в Xcode. С её помощью можно оптимизировать размещение элементов на экране под любой необходимый размер. Давайте сначала поместим 2 элемента Image View в Stackview, выбрав их на экране либо боковой панели с зажатой кнопкой "CMD":</p>
15 <p>Auto Layout - одна из лучших функций в Xcode. С её помощью можно оптимизировать размещение элементов на экране под любой необходимый размер. Давайте сначала поместим 2 элемента Image View в Stackview, выбрав их на экране либо боковой панели с зажатой кнопкой "CMD":</p>
16 <p>Теперь нажимаем на кнопку "Embed In Stack", выставляем параметр Axis в позицию Horizontal и устанавливаем параметр Spacing в значение 40:</p>
16 <p>Теперь нажимаем на кнопку "Embed In Stack", выставляем параметр Axis в позицию Horizontal и устанавливаем параметр Spacing в значение 40:</p>
17 <p>Если что-то пойдёт не так, можно нажать "CMD + Z" и повторить процедуру. Теперь нужно добавить оставшиеся элементы в Stackview. Зажимаем "CMD", а потом выбираем их на экране Main.Storyboard. И выставляем параметр Vertical в поле Axis.</p>
17 <p>Если что-то пойдёт не так, можно нажать "CMD + Z" и повторить процедуру. Теперь нужно добавить оставшиеся элементы в Stackview. Зажимаем "CMD", а потом выбираем их на экране Main.Storyboard. И выставляем параметр Vertical в поле Axis.</p>
18 <p>Теперь нажимаем кнопку "Add New Constraints" и выставляем параметры, показанные на скриншоте:</p>
18 <p>Теперь нажимаем кнопку "Add New Constraints" и выставляем параметры, показанные на скриншоте:</p>
19 <p>Осталось выбрать Stackview для всех элементов, а потом в поле Spacing установить значение 50.</p>
19 <p>Осталось выбрать Stackview для всех элементов, а потом в поле Spacing установить значение 50.</p>
20 <p>Разумеется, это ещё не всё, ведь для работы приложения потребуется написать код.</p>
20 <p>Разумеется, это ещё не всё, ведь для работы приложения потребуется написать код.</p>
21 <h2>Подключаем элементы к коду</h2>
21 <h2>Подключаем элементы к коду</h2>
22 <p>В первую очередь соединяем визуальные элементы с ViewController.swift. При этом элементы UILabel и UIImageView должны быть типа @IBOutlet, а UIButton - @IBAction. Выполняем эту операцию с зажатой кнопкой "CTRL" и выбранным Assistant Editor. По итогу получим:</p>
22 <p>В первую очередь соединяем визуальные элементы с ViewController.swift. При этом элементы UILabel и UIImageView должны быть типа @IBOutlet, а UIButton - @IBAction. Выполняем эту операцию с зажатой кнопкой "CTRL" и выбранным Assistant Editor. По итогу получим:</p>
23 <h2>Добавляем графику</h2>
23 <h2>Добавляем графику</h2>
24 <p>Теперь пришёл черёд для графики. Давайте<a>скачаем архив</a>с изображениями и добавим их в Assets.xcassets. Откроем архив и перетянем все элементы в проект за исключением папки icon.</p>
24 <p>Теперь пришёл черёд для графики. Давайте<a>скачаем архив</a>с изображениями и добавим их в Assets.xcassets. Откроем архив и перетянем все элементы в проект за исключением папки icon.</p>
25 <p>По итогу Assets.xcassets должен выглядеть следующим образом:</p>
25 <p>По итогу Assets.xcassets должен выглядеть следующим образом:</p>
26 <p>Вернёмся к экрану Main.Storyboard и выберем для каждого ImageView любое изображение игральных костей. Это следует делать в Attributes Inspector:</p>
26 <p>Вернёмся к экрану Main.Storyboard и выберем для каждого ImageView любое изображение игральных костей. Это следует делать в Attributes Inspector:</p>
27 <p>Для добавления фонового изображения вставляем дополнительный ImageView и устанавливаем параметры, которые указаны на скриншоте:</p>
27 <p>Для добавления фонового изображения вставляем дополнительный ImageView и устанавливаем параметры, которые указаны на скриншоте:</p>
28 <p>Для нашего фона в Attributes Inspector выбираем изображение "table":</p>
28 <p>Для нашего фона в Attributes Inspector выбираем изображение "table":</p>
29 <p>Дабы сделать текст читабельнее, изменим цвет и увеличим шрифт. Давайте выберем надпись, установим белый цвет и увеличим шрифт.</p>
29 <p>Дабы сделать текст читабельнее, изменим цвет и увеличим шрифт. Давайте выберем надпись, установим белый цвет и увеличим шрифт.</p>
30 <p>Кроме того, стоит выбрать изображение для кнопки.</p>
30 <p>Кроме того, стоит выбрать изображение для кнопки.</p>
31 <h2>Пишем код</h2>
31 <h2>Пишем код</h2>
32 <p>Вот мы и дошли до кода. Откроем файл ViewController.swift и вставим в функцию кнопки следующее:</p>
32 <p>Вот мы и дошли до кода. Откроем файл ViewController.swift и вставим в функцию кнопки следующее:</p>
33 @IBAction func rollACTION(_ sender: UIButton) { label.text = "Hello Dice" leftImageView.image = UIImage(named: "Dice6") rightImageView.image = UIImage(named: "Dice6") }<p>В результате мы программно поменяем значения элементов. Если мы запустим проект и нажмём на кнопки, то увидим эти значения на экране:</p>
33 @IBAction func rollACTION(_ sender: UIButton) { label.text = "Hello Dice" leftImageView.image = UIImage(named: "Dice6") rightImageView.image = UIImage(named: "Dice6") }<p>В результате мы программно поменяем значения элементов. Если мы запустим проект и нажмём на кнопки, то увидим эти значения на экране:</p>
34 <p>Завершающий шаг - написание функции, которая будет случайно выбирать значения для наших игральных костей. Также код станет выводить сумму чисел на экране. Создадим функцию rollDice(), а потом поместим в неё код:</p>
34 <p>Завершающий шаг - написание функции, которая будет случайно выбирать значения для наших игральных костей. Также код станет выводить сумму чисел на экране. Создадим функцию rollDice(), а потом поместим в неё код:</p>
35 func rollDice(){ let numberOne = arc4random_uniform(6) + 1 let numberTwo = arc4random_uniform(6) + 1 label.text = "The sum is: \(numberOne + numberTwo)" leftImageView.image = UIImage(named: "Dice\(numberOne)") rightImageView.image = UIImage(named: "Dice\(numberTwo)") }<p>Далее надо удалить код внутри кнопки "rollACTION" и вставить туда rollDice(). Потом поместим это значение в функцию viewDidLoad():</p>
35 func rollDice(){ let numberOne = arc4random_uniform(6) + 1 let numberTwo = arc4random_uniform(6) + 1 label.text = "The sum is: \(numberOne + numberTwo)" leftImageView.image = UIImage(named: "Dice\(numberOne)") rightImageView.image = UIImage(named: "Dice\(numberTwo)") }<p>Далее надо удалить код внутри кнопки "rollACTION" и вставить туда rollDice(). Потом поместим это значение в функцию viewDidLoad():</p>
36 // Функция, вызываемая при старте нашего приложения override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. rollDice() } // Значения для кнопки @IBAction func rollACTION(_ sender: UIButton) { rollDice() }<p>Вот и всё, теперь можно запускать игру. При этом каждый раз при нажатии кнопки "Roll" мы будем получать различные значения. Кстати, готовый проект есть на<a>GitHub</a>.</p>
36 // Функция, вызываемая при старте нашего приложения override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. rollDice() } // Значения для кнопки @IBAction func rollACTION(_ sender: UIButton) { rollDice() }<p>Вот и всё, теперь можно запускать игру. При этом каждый раз при нажатии кнопки "Roll" мы будем получать различные значения. Кстати, готовый проект есть на<a>GitHub</a>.</p>
37 <p><em>По материалам "<a>How To Make A Dice Roll iPhone App</a>".</em></p>
37 <p><em>По материалам "<a>How To Make A Dice Roll iPhone App</a>".</em></p>
38  
38