Stanford CS 193P iOS 7 Лекция 17 — фотокамера, датчики движения и Core Motion, «жизненный цикл» приложения (+iOS 9)

Лекция 17 начинается с продолжения демонстрационного примера Photomania Add Photo из предыдущей лекции: небольшая корректировка кода, связанная с очисткой imageURLs, и обработка ошибок местоположения.

Затем следует короткое теоретическое введение о том, как использовать фотокамеру с помощью класса ImagePickerController, который является subclass UIViewController. И вы можете разместить его на экране либо модально, либо в Popover, в зависимости от того, находитесь ли вы на iPad или на iPhone, и это первый раз, когда у нас будет  View Controller, который приходит не со storyboard.
Используем возможности  ImagePickerController для работы с реальной фотокамерой в приложении Photomania.

Запускаем приложение и смотрим, удалось ли нам заставить камеру работать.
Выбираем фотографа “My Photos”, кликаем на камеру, а затем на кнопку “Take Photo”.

Screen Shot 2016-01-23 at 2.32.34 PM

Мы ожидаем модального появления ImagePickerController, он приходит, мы получаем фотографию, изменяем масштаб, обрезаем, так как нам разрешено редактирование, и нажимаем на кнопку «Use Photo» и она устанавливается в нашем imageView.

Screen Shot 2016-01-23 at 2.35.51 PM
После заполнения заголовка фотографии нажимаем кнопку “Done”. Получаем “булавку” на карте, кликаем по ней и получаем выноску с миниатюрой фотографии и маленькой стрелочкой. Кликаем на стрелочке и получаем полномасштабную фотографию с заголовком.

Screen Shot 2016-01-23 at 2.37.19 PM

Далее следует теоретическая часть, связанная с получением информации о движении вашего прибора (акселерометр, гироскоп, магнитометр) и особенностями использования Core Motion. Теория подкрепляется другим демонстрационным примером Boucer, который представляет собой игру, в которой маленький красный квадратик двигается в игровом поле под воздействием реальной силы гравитации, а управление осуществляется наклоном вашего прибора.

Screen Shot 2016-01-23 at 2.45.16 PM

Далее опять следует теоретическая часть, объясняющая «жизненный цикл» приложения Application и возможности его делегата AppDelegate. Эти знания позволяют правильно управлять остановкой и повторным запуском игры Bouncer в случае, если пользователь временно переходит на другое приложение, а затем возвращается в игру, или переходит на другую закладку в Tab Bar Controller (например, с настройками), а затем возвращается в игру и т.д.

Демонстрируется применения Alerts и Action Sheets, но c учетом их существенных изменений в iOS 9.

Лекция 17, а также слайды на английском языке можно получить на iTunes called “17. Camera, Core Motion, Application Lifecycle”.

Код для демонстрационных примеров Photomania Add Photo и Bouncer можно найти здесь, а для iOS 9 и Xcode 9 (адаптивный интерфейс) на Github Photomania Add Photo и Bouncer.

В демонстрационном примере Photomania Add Photo интерфейс имеет существенное различие для iPhone и iPad  и требует использование двух различных storyboard, каждая из которых в случае адаптивного интерфейса использует концепцию Size Classes, а их переключение осуществляется в зависимости от размере экрана. Идеи такого интерфейса изложены здесь.
Полный русский неавторизованный конспект лекции, хронометрированный через каждые 5 минут, представлен в PDF — файле на

Лекция 17 CS193P Fall 2013 - Winter 2014 iOS 7.pdf