Дополнение к Лекции 14 Stanford CS 193P iOS 7. Адаптивные SplitViewController и Popover в приложении Photomania для iOS 9. (Objective-C).

Screen Shot 2015-11-26 at 6.05.00 PM

Screen Shot 2015-11-26 at 6.05.13 PM

С незапамятных времен Split View Controller был доступен только на  iPad. Начиная с  iOS 8, он теперь работает и на iPad, и на iPhone.

Это произошло потому, что в iOS 8 Apple представила, а в iOS 9 развивает дальше адаптивный пользовательский интерфейс (UI),  который включает в себя использование  Size Classes и адаптивную разметку Auto Layout. Согласно новой философии, пользовательский интерфейс может достаточно быстро настраиваться для любого типа прибора в зависимости от того, какой Size Class (класс размера) имеет его экран.

Адаптивный вариант UI для  Photomania Universal URL, функционирующий в iOS 9, находится на  Github.  Давайте посмотрим, как он был создан.

Читать далее

Stanford CS 193P iOS 7 Лекция 14 — UIApplication, Network Activity Indicator и Maps ( + iOS 9)

Screen Shot 2015-11-15 at 7.04.03 PM
В начале Лекции 14 кратко рассматривается класс приложения UIApplicationУ нашего приложения есть свойство, называемое delegate, которое устанавливается для вас автоматически, и вы получаете объект Application Delegаte, с помощью которого мы можем делать многие глобальные вещи.

Далее изучается одно специальное свойство UIApplication, а именно визуальный индикатором “сетевой” активности — Network Actity Indicator, который является глобальным и булевским. И именно эти две характеристики делают его использование проблематичным в среде с множеством перекрывающихся потоков, использующих сетевые запросы в одно и то же время.

Затем комментируются особенности демонстрационного примера с прошлой лекции, связанного с выборкой данных в фоновом режиме, и продолжает демонстрационный пример Photomania, обеспечивая работу приложения на iPad. Кроме того,  добавляется Popover segue и особенности его работы в Split View. Демонстрируется, как легко можно заимствовать UI из другого приложения путем прямого копирования и вставки элементов пользовательского интерфейса непосредственно на storyboard.

Читать далее

«Что нового в Swift 2?» на примерах. Часть 2.

Screen Shot 2015-10-28 at 3.18.06 PM

В первой части мы рассмотрели лишь часть новых возможностей Swift 2:

  • фундаментальные конструкции языка, такие, как enumsscoping (область действия), синтаксис аргументов и т.д.
  •  сопоставление с образцом (pattern matching)
  •  управление ошибками (error handling)

Во второй части мы рассмотрим оставшиеся:

  • расширения (extensions) протокола
  • проверка доступности (availability checking)
  • взаимодействие с Objective-C и С

Я буду рассматривать новые возможности Swift 2, сопровождая их примерами, код которых находится на Github.

Читать далее

«Что нового в Swift 2?» на примерах. Часть 1.

Screen Shot 2015-10-28 at 3.18.06 PM
Swift 2 сфокусировался на улучшении самого языка, улучшении взаимодействия с  Objective-C и повышении производительности компилируемых приложений. Новые возможности Swift 2 представлены в 6 различных областях:

  • фундаментальные конструкции языка, такие, как enums, scoping (область действия), синтаксис аргументов и т.д.
  •  сопоставление с образцом (pattern matching)
  • проверка доступности (availability checking)
  • расширения (extensions) протокола
  •  управление ошибками (error handling)
  • взаимодействие с Objective-C

Я буду рассматривать новые возможности Swift 2, сопровождая их примерами, код которых находится на Github.

Читать далее

Лекция 17 CS193P Winter 2015 — Internationalization и Settings

Screen Shot 2015-10-12 at 9.29.49 PM

В Лекции 17  рассматриваются две главные темы:

  1. интернационализация и локализация, которые позволяют использовать ваше приложение во всем мире на различных языках.
  2. добавление UI настроек  приложения в Общие Настройки (Settings) прибора.

Читать далее

Лекция 16 CS193P Winter 2015 — Фотокамера, Постоянное хранение и Вставка Картинки в Картинку (Camera, Persistence and Embed Segues)

Screen Shot 2015-10-07 at 9.11.40 PM

В Лекции 16  рассматриваются три главные темы:

  1. фотокамера, то есть как сделать фотографию и/или видео с помощью фотокамеры и получить их в своем приложении.
  2. постоянное хранение данных больших объемов на iOS устройствах. Это очень важная тема о том, как хранить информацию в вашей флэш памяти на iPhone, iPad и т.д. В Лекции дается обзор различных способов хранения.
  3. вставка картинки в картинку с помощью Embed Segues. Эта технология помогает вам увидеть, что происходит в другом месте, когда вы что-то делаете в данном месте

Читать далее

Лекция 15 CS193P Winter 2015 — Modal (и Popover) Segues

Screen Shot 2015-09-28 at 8.24.54 PM

Лекция 15  сосредоточена на модальных View Controllers как для iPad, так и для iPhone.

Пол Хэгерти намеренно отложил рассмотрение модальных segues на конец семестра. Потому что, когда люди знакомятся с ними слишком рано, они им очень нравятся и они говорят :”О, я буду делать все модальным. Это так легко -создавать модальные segues.”

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

Но иногда ваше приложение не может продолжить работу без того, чтобы остановить пользователя и задать ему вопрос. Для этого случая очень подходят модальные View Controllers, которые всего лишь UIViewController, которые мы показываем модально. Читать далее

Лекция 14 CS193P Winter 2015 — Core Location и MapKit

Screen Shot 2015-09-20 at 9.24.24 AM
Лекция 14 посвящена тому, как ваш iPhone может определять, где вы находитесь в этом мире, на этой планете. К этому имеют отношение два компонента: Core Location и MapKit. Core Location — это “внутренность” программного обеспечения по определению местоположения, не-UI часть, а MapKit — это наоборот пользовательский интерфейс (UI), то есть как мы представляем пользователю информацию о том, где мы находимся на карте.

Читать далее

Задание 5. Решение. Ощутите «магию» Swift на простейшей игре c Dynamic Animation (часть 2)

Screen Shot 2015-09-11 at 10.50.23 AM
В этом посте представлено продолжение решения обязательных и дополнительных пунктов Задания 5. Первую часть  можно посмотреть здесь.
Текст Домашнего задания на английском языке доступен на  iTunes в пункте “Developing iOS 8 app: Programming: Project 5″Текст Задания  5 на русском  языке размещен в PDF — файле

Задание 5 iOS 8.pdf


Для выполнения Задания 5 необходимо освоить материал Лекции 12 и Лекции 13.
В качестве прототипа кода для Задания 5 можно использовать код приложения «Dropit«, полученный на Лекции 12, который доступен на сайте Stanford для Swift 1.2 и Xcode 6 и здесь для для  Swift 2.0 и Xcode 7.

Я, как и в первой части,  делаю акцент на том, как правильное использовать такие конструкций Swift как Наблюдатели didSet{} , willSet{}, установленные на свойства, включая outlets, когда применять вычисляемые свойства и lazy ( отложенную) инициализацию. Все это в сочетании с методами «жизненного цикла» UIView и UIViewController дает не только очень понятный и компактный код, но и вызывает автоматический многокаскадный запуск вычислений, которые вы только описали и не запускали явно. Это создает действительно «магическое» впечатление. Особенно хочется отметить класс Settings, описанный в этом посте, которой двумя строками кода позволяет работать как с данными, хранящимися в NSUserDefaults, так и с данными, заданными по умолчанию, используя только оператор присвоения = .
Код для Swift 1.2 и Xcode 6 (если вы еще не установили Xcode 7) находится на Github. Код для Swift 2.0 и Xcode 7 находится на Github. В посте представлен код для Swift 2.0 и Xcode 7.

Пункты 1, 2, 3,4 обязательные. «Ракетка»

«Ракетка» не является объектом, управляемым динамическим аниматором animator, она не добавляется ни к какому «поведению». Поэтому «жизнь» «ракетки» протекает полностью в игровом поле, то есть в классе BreakoutView. Однако аниматор постоянно «чувствует» ее как границу для столкновений,  поэтому любое появление или перемещение «ракетки» в классе BreakoutView должно сопровождаться изменением ее границы в аниматоре. Столкновение с этой границей-«ракеткой» не обрабатывается методами делегата UICollisionBehaviorDelegate класса UICollisionBehavior, нам достаточно того, что «мячик» от нее отскакивает.
Но типом идентификатора этой границы-«ракетки» Читать далее

Задание 5. Решение. Ощутите «магию» Swift на простейшей игре c Dynamic Animation (часть 1)

Screen Shot 2015-09-07 at 4.11.09 PM

Текст Домашнего задания на английском языке доступен на  iTunes в пункте “Developing iOS 8 app: Programming: Project 5″Текст Задания  5 на русском  языке размещен в PDF — файле

Задание 5 iOS 8.pdf

Для выполнения Задания 5 необходимо освоить материал Лекции 12 и Лекции 13.
В качестве прототипа кода для Задания 5 можно использовать код приложения «Dropit«, полученный на Лекции 12, который доступен на сайте Stanford для Swift 1.2 и Xcode 6 и здесь для для  Swift 2.0 и Xcode 7.
В этом посте подробно описывается выполнение некоторых обязательных пунктов Задания 5. Вторая часть решения Задания 5 находится здесь.

И я хочу сделать акцент на том, как правильное использование таких конструкций Swift как Наблюдатели  didSet{} , willSet{}, установленные на свойства, включая outlets, как вычисляемые свойства и lazy ( отложенная) инициализация в сочетании с методами «жизненного цикла» UIView  и UIViewController могут не только давать очень понятный и компактный код, но и вызывать автоматический многоходовый запуск вычислений, которые вы только описали и не запускали явно. Это создает действительно «магическое» впечатление.
Код для Swift 1.2 и Xcode 6 (если вы еще не установили Xcode 7) находится на Github. Код для Swift 2.0  и Xcode 7 находится на Github. В посте представлен код для  Swift 2.0  и Xcode 7.

Читать далее