Адаптивные SplitViewController и Popover для iOS 9. (Swift). Часть 2

Screen Shot 2016-03-17 at 8.32.24 PM
Это вторая часть поста, связанного с изучением адаптивного поведения Split View Controller и Popover в iOS 9 на iPad и на iPhone, которое стало возможным благодаря концепции Size Classes. Обучение состоит в создания на Swift практических приложений, работающих с сервером Flickr.com, который является облачным сервисом для хранения фотографий.
В первой части поста перечислены пять интересных с точки зрения разработчика случаев применения адаптивного Split View Controller и Popover, которые отличаются сложностью MasterDetail везде один и тот же — единственный Image View Controller, вставленный в Navigation Controller и призванный показывать изображение фотографии:

1. Классический вариант: один элемент в Master, вставленный в Navigation Controller, (часто это Table View Controller)

2. Множество Table View Controller элементов, вставленных в Navigation Controller

3. Tab Bar Controller в качестве Master

4. Случай разных UI и разных пользовательских классов для приборов с разными Size Classes здесь не рассматривается, но идею можно посмотреть в “Адаптивный интерфейс с двумя storyboards для iOS 9”.

5. Адаптивный Popover

В первой части  поста осуществлялось построение базового экспериментального приложения на Swift, которое было распространено на случаи 1-2. Во второй части мы будем дальше усложнять наше экспериментальное приложение и распространим его на случаи 3 и 5. Код для всех вариантов можно найти на Github.

Читать далее

Адаптивные SplitViewController и Popover для iOS 9. (Swift). Часть 1

Screen Shot 2015-12-02 at 9.32.13 PM
Screen Shot 2015-12-02 at 9.35.24 PM
Проводя адаптацию предыдущего стэнфордского курса «Developing iOS  7 Apps for iPhone and iPad» 2014 г. к iOS 9, я обнаружила, что в курсе «Developing iOS 8 Apps with Swift» 2015 г. практически отсутствует настройка адаптивного Split View Controller, так как там он использовался только для Графического Калькулятора на Лекции 6 и 7 и в Домашнем Задании 3. В этом варианте Master не представлял собой традиционную таблицу или каскад таблиц, выбирая из которых соответствующий элемент, мы получали в качестве Detail изображение, связанное с выбранным элементом.

В курсе по iOS 8 нам не требовалось более скрупулезной настройки адаптивного UI, состоящего из SplitViewController и Popover.
Мне представляется целесообразным восполнить этот пробел и реализовать универсальное приложение Photomania Universal URL, которое представлено в стэнфордском курсе  «Developing iOS  7 Apps for iPhone and iPad» 2014 г, на Swift в iOS 9.  Приложение Photomania на Swift и iOS 9 находится на  Github. Давайте подробно рассмотрим как оно было построено.

При проектировании этого приложения на iOS 9 и Swift мы должны решить три вопроса:

  1. создать адаптивный интерфейс в iOS 9 на основе концепции Size Classes
  2. обеспечить сохранение данных в Core Data и работу с ними UI приложения
  3. осуществлять подачку данных с сервера Flickr в фоновом режиме

В этом посте решается первая задача, а именно, — создание адаптивного интерфейса со  SplitViewController и Popover.

Читать далее

Стэнфордский курс CS193P (iOS9, Swift) осень 2015 не планируется размещать на iTunes?

Стэнфордский курс  CS193P: «iPhone and iPad Application Programming», который сегодня, 4 декабря, закончился для студентов Стэнфорда, и исходя из традиций прошлых лет, уже должен быть выложен на iTunes, там не появится в ближайшее время. Этим курсом интересуются во всем мире, все его ждали с нетерпением и на Quora был задан вопрос: «Когда курс CS193P: «iPhone and iPad Application Programming» 2015-2016 появится на iTunes?».

Читать далее

Лекция 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.

Читать далее

Swift 2.0 и iOS 9 уже на пороге

Меньше, чем через неделю будет объявлено о выходе официальных (или Gold Master) версий Swift 2.0iOS 9 и Xcode 7. Сейчас действует бэта 6 версия этого программного обеспечения,  Поэтому я решила на своем сайте обновить демонстрационные примеры, сопровождающие замечательный стэнфордский курс CS193P WINTER 2015 «Developing iOS 8 Apps with Swift» до  Swift 2 для запуска их в Xcode 7. Самое интересное в этой новости заключается в том, что из Xcode 7 вы можете запустить эти демонстрационные примеры на своем устройстве (или поделится с друзьями) совершенно бесплатно — для этого не нужно иметь сертификат разработчика Developer Account,  стоимостью 99 $/год. Начиная с Xcode 7 политика Apple по отношению к разработчикам изменилась. Они хотят привлекать к разработке приложений более молодых программистов. Но не нужно ждать выхода официальных версий  — уже сейчас Xcode 7  (а вместе с ней Swift 2 и iOS 9) находятся в публичном доступе здесь.

Надо отметить, что в 2015 году на стэнфордских курсах наряду с демонстрационными примерами для первых лекций, где не требуется реальный прибор (iPhone или iPad) и достаточно симулятора, последние лекции сопровождаются очень интересными демонстрациями с привлечением реальных iPhone или iPad:

Читать далее