Сегодня мы рассмотрим, как создать несколько значков приложений, таких как приложение Apple WWDC.
Начиная
UITableViewController
Первое, что вам нужно сделать, это настроить базовый UITableViewController.
import UIKit
class ViewController: UITableViewController {
fileprivate let cellId = "cellId"
override func viewDidLoad() { super.viewDidLoad() tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellId) }
}
extension ViewController { override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 2 }
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) return cell }
}
Импорт и настройка значков приложений
Затем создайте новую папку с именем «Значки приложений» или как вы хотите ее называть. Мы будем хранить наши активы в этой папке, а не в папке Assets.xcassets. Перетащите ресурсы значка приложения в только что созданную папку и установите флажок «копировать элементы при необходимости».
Поскольку мы не используем шаблон значка приложения Assets.xcassests, нам необходимо его удалить. Щелкните «Assets.xcassests», щелкните правой кнопкой мыши «AppIcon» и выберите «Удалить выбранные элементы».
Теперь перейдите к обзору проекта, я думаю, это то, что он называется ... Прокрутите немного вниз и выберите раскрывающийся список рядом с «Источник значков приложений» и нажмите «Не использовать каталоги ресурсов».
После выбора «Не использовать каталоги ресурсов» он может быть красным и по-прежнему писать «AppIcon», это просто ошибка в xcode, поэтому не беспокойтесь об этом.
Затем мы вернемся к файлу ViewController.swift и создадим массив, содержащий все имена изображений, которые мы будем использовать. fileprivate let appIcons = [ "red", "blue", "green", "orange", "yellow" ]
Внутри «numberOfRowsInSection» измените количество возвращаемых элементов на return appIcons.count
,
и внутри "cellForRowAt" добавьте cell.textLabel?.text = appIcons[indexPath.row]
Info.plist
Теперь щелкните правой кнопкой мыши «Info.plist», выберите «Открыть как» и выберите «Исходный код». Вставьте этот код сразу под первым ».
<key>CFBundleIcons</key>
<dict>
<key>CFBundlePrimaryIcon</key>
<dict>
<key>CFBundleIconFiles</key>
<array>
<string>YOUR PRIMARY APP ICON NAME HERE</string>
</array>
<key>UIPrerenderedIcon</key>
<false/>
</dict>
<key>CFBundleAlternateIcons</key>
<dict>
<key>YOUR SECONDARY APP ICON NAME HERE</key>
<dict>
<key>CFBundleIconFiles</key>
<array>
<string>YOUR SECONDARY APP ICON NAME HERE</string>
</array>
<key>UIPrerenderedIcon</key>
<false/>
</dict>
</dict>
</dict>
добавьте этот код для каждого дополнительного значка приложения внутри словаря CFBundleAlternateIcons.
<key>YOUR SECONDARY APP ICON NAME HERE</key>
<dict>
<key>CFBundleIconFiles</key>
<array>
<string>YOUR SECONDARY APP ICON NAME HERE</string>
</array>
<key>UIPrerenderedIcon</key>
<false/>
</dict>
Поскольку у нас есть пять значков, наш код будет…
<key>CFBundleIcons</key>
<dict>
<key>CFBundlePrimaryIcon</key>
<dict>
<key>CFBundleIconFiles</key>
<array>
<string>red_icon</string>
</array>
<key>UIPrerenderedIcon</key>
<false/>
</dict>
<key>CFBundleAlternateIcons</key>
<dict>
<key>red_icon</key>
<dict>
<key>CFBundleIconFiles</key>
<array>
<string>red_icon</string>
</array>
<key>UIPrerenderedIcon</key>
<false/>
</dict>
<key>blue_icon</key>
<dict>
<key>CFBundleIconFiles</key>
<array>
<string>blue_icon</string>
</array>
<key>UIPrerenderedIcon</key>
<false/>
</dict>
<key>green_icon</key>
<dict>
<key>CFBundleIconFiles</key>
<array>
<string>green_icon</string>
</array>
<key>UIPrerenderedIcon</key>
<false/>
</dict>
<key>orange_icon</key>
<dict>
<key>CFBundleIconFiles</key>
<array>
<string>orange_icon</string>
</array>
<key>UIPrerenderedIcon</key>
<false/>
</dict>
<key>yellow_icon</key>
<dict>
<key>CFBundleIconFiles</key>
<array>
<string>yellow_icon</string>
</array>
<key>UIPrerenderedIcon</key>
<false/>
</dict>
</dict>
</dict>
Теперь наш Info.plist должен выглядеть примерно так.
Измените значок приложения
В ViewController.swift создайте функцию с именем «setAppIcon» и сделайте так, чтобы она принимала параметр с именем «_ named» и имела тип «String». func setAppIcon(_ named: String?) {}
Внутри функции «setAppIcon» добавьте UIApplication.shared.setAlternateIconName(named) { (error) in if let error = error { print(error.localizedDescription) } }
Теперь давайте добавим override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {}
. Создадим константу с именем 'row' и установим его равным 'indexPath.row' let row = indexPath.row
Теперь мы собираемся использовать оператор switch, чтобы определить, какие ячейки нажимаются и какой значок приложения отображать. Мы собираемся создать кейс для каждого значка приложения, который у вас есть, в каждом случае мы будем вызывать нашу функцию setAppIcon, которую мы создали ранее. Установите для первого значка приложения значение «nil», потому что оно установлено как значок приложения по умолчанию в нашем info.plist. Для других значков приложений будут установлены имена импортированных файлов, а регистр по умолчанию также будет «ноль».
switch row {
case 0: setAppIcon(nil)
case 1: setAppIcon("blue-icon")
case 2: setAppIcon("green-icon")
case 3: setAppIcon("orange-icon")
case 4: setAppIcon("yellow-icon")
default: setAppIcon(nil)
}
Наш окончательный код должен выглядеть примерно так.
import UIKit
class ViewController: UITableViewController {
fileprivate let cellId = "cellId"
fileprivate let appIcons = [ "red", "blue", "green", "orange", "yellow" ]
override func viewDidLoad() { super.viewDidLoad() tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellId) }
fileprivate func setAppIcon(_ named: String?) { UIApplication.shared.setAlternateIconName(named) { (error) in if let error = error { print(error.localizedDescription) } } }
}
extension ViewController { override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return appIcons.count }
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) cell.textLabel?.text = appIcons[indexPath.row] return cell }
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { if UIApplication.shared.supportsAlternateIcons { let row = indexPath.row switch row { case 0: setAppIcon(nil) case 1: setAppIcon("blue-icon") case 2: setAppIcon("green-icon") case 3: setAppIcon("orange-icon") case 4: setAppIcon("yellow-icon") default: setAppIcon(nil) } } }
}
Давайте запустим приложение и убедимся, что все работает правильно.
Потрясающие! Все работает!