Создание Расширения Today Для Ios 8

С выходом iOS 8 Apple представила новую концепцию под названием Расширения приложений , с помощью которого вы можете поделиться функционалом своего приложения с другими приложениями и самой ОС.

Одним из таких типов расширений являются Сегодняшние расширения , также известен как Виджеты .

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

В этой статье вы напишете приложение на основе расширения Расширение «Сегодня» , который будет представлять текущую рыночную стоимость Биткойн на основе доллара США.

Никогда еще предоставление необходимой информации вашим пользователям не было таким простым и быстрым.

Давайте начнем! Биткойн / Биткойн Для тех, кто еще не знаком с Биткойн — это цифровая криптовалюта, которая все еще находится в зачаточном состоянии.

Помимо использования его для однорангового обмена и покупок, Биткойн позволяет пользователю обменивать их на другие криптовалюты, такие как Dogecoin и Litecoin, или на доллары США или евро.

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

Таким образом, это идеальный кандидат для Today Extension, поскольку инвесторы или покупатели захотят знать цену акций с точностью до секунды! Криптикер Поскольку вы пишете расширение, для начала вам понадобится готовое приложение; что ж, пришло время познакомиться с Crypticker. Криптикер — это простое приложение, которое отображает текущую цену биткойнов, разницу между вчерашней ценой и текущей ценой, а также график истории цен.

График включает 30-дневную историю; Проведя пальцем по графику, вы увидите точную цену на конкретный день.

Расширение будет содержать все эти возможности, но вы не сможете увидеть цену за конкретный день, свайпнув по графику.

В Today Extensions есть некоторые связи, особенно когда речь идет об использовании жестов и многозадачности.

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

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

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

В итоге вы напишете расширение, а не целое приложение.

Давайте скомпилируем и запустим приложение.

Обратите внимание, что для просмотра цен в режиме реального времени с помощью веб-сервиса вам потребуется подключение к Интернету.



Создание расширения Today для iOS 8

Приложение выглядит как скриншот; Отображаемые данные, конечно, будут зависеть от того, как работает рынок биткойнов.

Прикоснувшись к графику внизу, появится линия, отображающая цену за соответствующий день.

Для тех, кто еще не знает БТД это сокращенная форма слова Биткойн ; точно так же, как доллар США означает доллар США.

Сегодня Extension представит уменьшенную версию основной презентации Crypticker. Теоретически приложение Crypticker может показывать цены на несколько криптовалют, но наше расширение предназначено только для БТД .

Поэтому его называют Виджет БТД .

Примечание: Расширения по своей природе имеют только одну простую функциональную цель.

Если вы хотите отображать информацию для другой криптовалюты, например Dogecoin, то лучше всего создать еще один виджет и приложение с ним или соответствующим образом спроектировать свой пользовательский интерфейс, например, как виджет Акции .

К концу статей ваш Расширение «Сегодня» будет выглядеть примерно так:

Создание расширения Today для iOS 8

Добавление расширения Target Today Расширения создаются как отдельный двоичный файл, полученный от их хост-приложения.

Поэтому вам придется добавить целевое расширение Today в проект Crypticker. В Xcode в Project Navigato выберите проект Crypticker и добавьте новую цель.

Редактор\Добавить цель… Тогда выбирай iOS\Расширение приложения\Расширение Today .

И нажмите кнопку Следующий .



Создание расширения Today для iOS 8

В наименование товара входить Виджет БТД и убедитесь, что выбран язык программирования Быстрый , и что проект Встроить в приложение являются Криптикер .

И нажмите Заканчивать .



Создание расширения Today для iOS 8

При появлении запроса необходимо активировать схему Виджет БТД .

Потому что в тексте указано, что для вас будет создана другая схема.

Xcode .

Поздравляем! Сейчас Виджет БТД появится в вашем списке цели .



Создание расширения Today для iOS 8

Убедитесь, что вы выбрали Виджет БТД , затем вкладку «Общие» и нажмите кнопку + , который находится под линией Связанные фреймворки и библиотеки .

Как показано на рисунке:

Создание расширения Today для iOS 8

Выбирать CryptoCurrencyKit.framework и нажмите Добавлять .

КриптовалютаKit – пользовательская структура, которая используется приложением Криптике для получения цен и валют из сети.

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

Для обмена данными между хост-приложением и его расширениями необходимо использовать специальную платформу.

Если вы этого не сделаете, вам придется многократно дублировать код и нарушить важное правило программной инженерии: СУХОЕ — или, Не повторяйтесь.

Я повторю еще раз: «Не повторяйтесь» .

С этого момента можно приступать к реализации расширения.

Обратите внимание, что теперь у вас есть группа в Навигатор проекта , названный в честь вашей новой цели, Виджет БТД .

Здесь по умолчанию находится код расширения Today. Разверните группу, и вы увидите контроллер представления, раскадровку и файл Info.plist. Его целевая конфигурация также указывает ему загружать интерфейс из MainInterface.storyboard который содержит один контроллер представления с назначенным ему классом СегодняViewController.swift .



Создание расширения Today для iOS 8

Вы заметите, что некоторые файлы, которые должны быть в шаблоне Today Extension, отсутствуют; например, как приложение делегата.

Помните, что расширения выполняются внутри другого хост-приложения, поэтому они не проходят традиционный жизненный цикл приложения.

Фактически жизненный цикл расширения сопоставлен с жизненным циклом TodayViewController. Открыть MainInterface.storyboard и вы увидите тёмно-светлый фон со светлой надписью "Привет, мир" .

Сегодняшние расширения иметь изображения высочайшего разрешения со светлым фоном и светлым или ярким текстом, который идеально сочетается с темным, размытым фоном Центра уведомлений.

Убедитесь, что цель выбрана Виджет БТД на панели инструментов Xcode , скомпилировал и запустил.

В результате появится окно с запросом разрешения на запуск приложения.

Xcode спросит вас, какое хост-приложение вы хотите запустить.

Выбирать Сегодня .

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



Создание расширения Today для iOS 8

Это также позволяет Xcode использовать отладчик во время работы виджета.



Создание расширения Today для iOS 8

Вот ваш виджет. Круто, не так ли? Хотя это очень интересно, виджет все еще требует доработки.

Пришло время заняться чем-то интересным! Примечание: Вы можете заметить множество ошибок, связанных с использованием Автоматический макет которые отображаются в консоли при запуске виджета.

Это проблема с шаблоном в Xcode , и мы надеемся, что Apple решит эту проблему в будущем.

Хотя, не волнуйтесь, ведь у вас уже будет свой интерфейс и возможность использовать Автоматический макет .

Создание интерфейса Открытие MainInterface.storyboard и удалить Этикетка .

Добавьте представление размером 150 пикселей в высоту и 320 пикселей в ширину и установите для него значение Инспектор размеров .

Переместите кнопку, две метки и представление из библиотеки объектов в контроллеры представления.

  • Поместите одну из меток в верхний левый угол и в Инспекторе атрибутов установите для текста значение 592,12 доллара, а для цвета — красный: 66, зеленый: 145 и синий: 211. Он будет показывать текущую рыночную цену.

  • Поместите еще одну этикетку справа от только что установленной, но оставьте поле справа для кнопки.

    В инспекторе атрибутов установите для текста значение +1,23, а для цвета — красный: 133, зеленый: 191 и синий: 37. Это покажет разницу между вчерашней ценой и текущей ценой.

  • Переместите кнопку в верхний правый угол, а в Инспекторе атрибутов установите для изображения значение Caret-Notification-Center и удалите заголовок.

  • Наконец, поместите пустое представление под двумя метками и кнопкой, растяните его так, чтобы нижний и боковые края касались содержимого представления, и установите высоту на 98. В инспекторе атрибутов установите для фона значение «Очистить цвет», а в разделе «Идентификация»: Инспектор установил класс на - JBLineChartView .

Примечание: есть класс под названием JBLineChartDotView , который Xcode может предложить при вводе, убедитесь, что вы выбрали JBLineChartView .

Ваш Вид И Структура документа должно выглядеть примерно так:

Создание расширения Today для iOS 8

Примечание: Вид представлен белым цветом для наглядности в этой статье.

На самом деле ваше представление будет иметь темно-серый фон, который имитирует то, как ваше представление будет отображаться в Центре уведомлений.

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

Автоматический макет правильно определить местоположение.

Теперь разверните группу Криптикер В Навигатор проекта и выберите Images.xcassets. В Инспектор файлов , добавьте каталог темы в цель расширения, установив флажок слева от Виджет БТД .

Это делает Xcode включить каталог графических ресурсов из цели Криптикер к вашей цели Виджет ; здесь находится изображение центра уведомлений каретки, которое вы использовали для своей кнопки.

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

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



Создание расширения Today для iOS 8

Вернуться к MainInterface.storyboard и открыть Помощник редактора .

И убедитесь, что СегодняViewController.swift является активным файлом.

Добавьте следующий код в начало файла:

  
  
  
  
  
  
  
  
  
   

import CryptoCurrencyKit

Вы выполнили импорт фреймворка КриптовалютаKit .

Далее вам следует обновить объявление класса, которое должно выглядеть следующим образом:

class TodayViewController: CurrencyDataViewController, NCWidgetProviding {

Это приведет к СегодняViewController станет подклассом Валурренчидатавиевконтроллер и обеспечит его соответствие протоколу NCWidgetProviding .

Валурренчидатавиевконтроллер включен в КриптовалютаKit а также используется в качестве основного представления в Crypticker. Поскольку виджет и приложение будут показывать аналогичную информацию через UIViewController , имеет смысл поместить повторно используемые компоненты в суперкласс, а затем создать их подклассы, поскольку заявленные требования различаются.

NCWidgetProviding , — это протокол, специально разработанный для виджетов.

Есть два метода его получения, которые вы реализуете.

Удерживайте Ctrl и перейдите от кнопки к нашему классу, чуть ниже объявления класса.

В появившемся диалоговом окне убедитесь, что Связь выбран как Выход ,Тип выбран как UIButton и введите toggleLineChartButton в поле Имя .

Нажмите Соединять .



Создание расширения Today для iOS 8

Затем, удерживая Ctrl, на этот раз перейдите от кнопки к нижней части класса.

В появившемся диалоговом окне измените Связь на Действие , установить Тип В UIButton и введите toggleЛинейная диаграмма ровняться Имя .

Нажимать Соединять

Создание расширения Today для iOS 8

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

Теперь вам нужно их соединить.

В Структура документа , удерживайте Ctrl и отойдите от T сегодня Контроллер представления К ценник (с текстом, установленным на сумму 592,12 доллара США).

Выберите PriceLabel во всплывающем окне, чтобы создать соединение.

Повторите все это для другой этикетки, выбрав ценаChangeLabe из всплывающего окна.

Наконец, сделайте то же самое для Представление линейного графика выбрав линияДиаграммаView из всплывающего окна.



Создание расширения Today для iOS 8

Автоматический макет Для того, чтобы ваш виджет был адаптивным, вам необходимо установить Автоматический макет коммуникации.

Новые соединения, которые появятся в iOS 8, — это концепция Адаптивный макет т. е.

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

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

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

Центр уведомлений будет использовать введенные вами данные для отображения виджета на соответствующей высоте.

Выберите «Этикетка $592,12», а затем выберите Редактор\Размер в соответствии с содержимым .

Если вариант Размер, соответствующий содержанию отключено в меню, снимите флажок «Ярлык», затем выберите его еще раз и повторите попытку; Иногда Xcode может работать с перебоями.

Далее с помощью кнопки «Закрепить» внизу рабочей области раскадровка , установите приоритет Top и Leading на 8 и 16 соответственно.

Убедись в том, что Ограничить поля выбрано.



Создание расширения Today для iOS 8

Выберите «Метка +1,23» и выберите еще раз.

Редактор\Размер в соответствии с содержимым .

Затем с помощью кнопки Приколоть , выберите соединение Верхний и конечный и в свойствах установите значение 8.

Создание расширения Today для iOS 8

Выберите «Кнопка» и используйте кнопку «Закрепить», чтобы установить приоритет для «Сверху» и «Концевой» на 0, а для «Низа» — на 8. Ширина и Высота — на 44. Убедитесь, что Ограничить поля выключен.



Создание расширения Today для iOS 8

Вам необходимо снизить приоритет нижней привязки для кнопки.

Нажмите кнопку и откройте Инспектор размеров.

Найдите нижнее пространство для: соединения в списке соединений нажмите кнопку Редактировать и изменить его Приоритет в 250. Понижая приоритет, вы разрешаете системе Автоматический макет изменить эту привязку, если он сочтет это необходимым.

250 — это произвольное значение, которое меньше 1000, что является приоритетом по умолчанию для всех привязок.

Эта привязка должна измениться, как только виджет окажется в свернутом состоянии.

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



Создание расширения Today для iOS 8

Наконец, выберите Представление линейного графика .

Использование кнопки Приколоть , выбирать Ведущий, завершающий и нижний и в свойствах установите значение 0 и высоту 98.

Создание расширения Today для iOS 8

От Структура документа выбор вида контроллеров Вид , а потом Редактор\Устранение проблем с автоматическим макетом\Все виды\Обновить кадры .

Это устранит любые Автоматический макет оповещения в рабочих областях путем обновления фреймов в соответствии с правильными привязками.

Если Обновить кадры выбрано, значит вы сделали все как нужно и запускать приложение не нужно.

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

Находить Представление линейного графика В Структура документа и нажмите на треугольник, чтобы развернуть его.

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

Выберите его, а затем переместите Ctrl + перетаскивание на Помощник редактора , расположенный чуть ниже другой розетки.

Во всплывающем окне убедитесь, что Связь выбрано Выход и введите линияДиаграммаВысотаОграничение Для Имя .

Нажмите Соединять .



Создание расширения Today для iOS 8

Реализация TodayViewController.swift Теперь интерфейс на месте и настроено то, что нужно, открываем файл СегодняViewController.swift выбрав его в редакторе стандартов.

Вы заметите, что работаете со стандартным подклассом.

UIViewController .

Удобно, не так ли? Хотя позже вы столкнетесь с новым методом виджетPerformUpdateWithCompletionHandler из протокола NCWidgetProviding .

Подробнее об этом вы узнаете в конце этой статьи.

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

Определите свойство вверху СегодняViewController который вы будете использовать для отслеживания, будет ли отображаться линейный график или нет:

var lineChartIsVisible = false

Теперь замените метод viewDidLoad() следующей реализацией:

override func viewDidLoad() { super.viewDidLoad() lineChartHeightConstraint.constant = 0 lineChartView.delegate = self; lineChartView.dataSource = self; priceLabel.text = "--" priceChangeLabel.text = "--" }

Этот метод делает следующее:

  1. Устанавливает высоту для «ограничений высоты» линейной диаграммы на 0, так что это значение по умолчанию.

  2. Устанавливает себя в качестве источника данных и делегата для представления линейной диаграммы.

  3. Устанавливает текст-заполнитель на двух метках.

Оставайся внутри СегодняViewController и добавьте следующий метод:

override func viewDidAppear(animated: Bool) { super.viewDidAppear(animated) fetchPrices { error in if error == nil { self.updatePriceLabel() self.updatePriceChangeLabel() self.updatePriceHistoryLineChart() } } }

Метод fetchPrices определено в Валурренчидатавиевконтроллер и является асинхронным вызовом, который принимает завершение блоков.

Метод делает запрос к веб-сервису, упомянутому в начале статьи, для получения информации о цене Биткойн .

Метод обновляет оба Этикетка и линейный график.

Методы обновления также определены в суперклассе.

Они просто берут значения, полученные с помощью fetchPrices, и форматируют их соответствующим образом для отображения на экране.

Из-за дизайна виджета вам также необходимо реализовать виджетМаргинИнсетсФорПропоуздМаргинИнсетс для предоставления вкладок настраиваемых полей.

Добавьте следующий код в СегодняViewController :

func widgetMarginInsetsForProposedMarginInsets (defaultMarginInsets: UIEdgeInsets) -> (UIEdgeInsets) { return UIEdgeInsetsZero }

По умолчанию виджеты имеют большой запас, который по умолчанию есть у многих виджетов Apple. Если вы хотите заполнить всю ширину Центра уведомлений, вам необходимо реализовать этот метод и вернуть UIEdgeInsetsZero , который определяет значение 0 для всех сторон.

Теперь пришло время посмотреть, что у вас получилось.

Выберите схему виджета BTC. Скомпилируйте и запустите расширение.

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

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

  • Если виджет не отображается в Центре уведомлений, вам нужно будет добавить его через меню «Правка».

    В нижней части просмотра содержимого Сегодня Вы увидите кнопку Редактировать .

    Нажмите кнопку, чтобы развернуть меню всех расширений.

    Сегодняшние расширения которые установлены в системе.

    Здесь вы можете включать, отключать и переставлять их по своему усмотрению.

    Включать Виджет БТД если вы еще этого не сделали.



Создание расширения Today для iOS 8

Круто, не так ли?! Ваш виджет теперь отображает цены в реальном времени на Биткойн прямо в Центре уведомлений.

Но вы, вероятно, заметили одну проблему; кнопка не работает и схему не видно.



Создание расширения Today для iOS 8

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

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

Заменить пустой метод toggleЛинейная диаграмма со следующим кодом:

@IBAction func toggleLineChart(sender: UIButton) { if lineChartIsVisible { lineChartHeightConstraint.constant = 0 let transform = CGAffineTransformMakeRotation(0) toggleLineChartButton.transform = transform lineChartIsVisible = false } else { lineChartHeightConstraint.constant = 98 let transform = CGAffineTransformMakeRotation(CGFloat(180.0 * M_PI/180.0)) toggleLineChartButton.transform = transform lineChartIsVisible = true } }

Этот метод контролирует постоянное значение высоты якоря.

Представление линейного графика изменить размер окна.

Он также применяет к кнопке преобразование расширения, таким образом точно отображая видимость диаграммы.

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

Вы можете сделать это в методе viewDidLayoutSubviews добавив его в СегодняViewController :

override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() updatePriceHistoryLineChart() }

Убедитесь, что схема выбрана Виджет БТД , скомпилируйте и запустите приложение.

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

Слева вы увидите, как выглядит виджет, когда диаграмма скрыта.

Справа вы увидите, как он отображается, когда мы «развернули» виджет. Отлично, правда!

Создание расширения Today для iOS 8

Давайте быстро изменим цвет линии, и у вас будет один виджет. Добавьте следующее в СегодняViewController :

override func lineChartView(lineChartView: JBLineChartView!, colorForLineAtLineIndex lineIndex: UInt) -> UIColor! { return UIColor(red: 0.17, green: 0.49, blue: 0.82, alpha: 1.0) }

Убедитесь, что выбрана правильная схема.

Скомпилируйте и запустите приложение.

Выбирать Сегодня как приложение для запуска по запросу.



Создание расширения Today для iOS 8

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

Система делает это периодически, чтобы ваш виджет соответствовал современным требованиям.

Заменить существующую реализацию метода виджетPerformUpdateWithCompletionHandler со следующим кодом:

func widgetPerformUpdateWithCompletionHandler(completionHandler: ((NCUpdateResult) -> Void)!) { fetchPrices { error in if error == nil { self.updatePriceLabel() self.updatePriceChangeLabel() self.updatePriceHistoryLineChart() completionHandler(.

NewData) } else { completionHandler(.

NoData) } } }

Этот метод делает следующее:

  • Он получает текущие данные о ценах из веб-сервиса, вызывая fetchPrices .

  • Если ошибок нет, интерфейс постоянно обновляется.

  • Наконец - и в соответствии с требованиями протокола NCWidgetProviding — функция вызывает поставляемый в системе блок завершения с перечислением .

    NewData.

  • В случае ошибки блок завершения вызывается с помощью .

    Ошибочное перечисление .

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

И вот мы закончили создание вашего расширения.

Расширение «Сегодня» ! Вы можете скачать финальный проект Здесь .

Ну и что дальше? Центр уведомлений в iOS 8 — это ваша личная игровая площадка! Виджеты уже много лет доступны в некоторых других мобильных операционных системах, и теперь Яблоко наконец-то дал вам возможность их создавать.

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

Идите дальше и придумывайте новые идеи приложений, использующие возможности виджетов.

Если вы хотите узнать больше о создании других типов расширений приложений iOS 8, прочитайте нашу книгу iOS 8 от Tutorials, где вы можете узнать о Расширения для фотографий , Поделиться расширениями , Расширения действий и многое другое! Нам не терпится увидеть, что вы придумаете, и надеемся, что ваше Сегодняшние расширения в ближайшем будущем будет в верхней части наших Центров уведомлений! Теги: #Today Extension #Swift #objective-c #Разработка под iOS #ios8 #Разработка под iOS #objective-c #Swift

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.