Stanford CS 193P iOS 7 2014 — Задание 4. Графическая игра Set (Objective-C)

Screen Shot 2015-11-09 at 3.50.37 PM

Содержание

Цель задания — создание более приближенных к реальности, улучшенных по внешнему виду версий Set Card и Playing Card игр “на совпадение”. В этом задании вы должны применить ваши новые познания по созданию пользовательских классов UIView и использованию UIDynamicAnimator. Вам придется более плотно познакомиться с механизмом Autolayout, чтобы обеспечить правильное вращение вашего пользовательского интерфейса (UI).

Текст Домашнего задания на английском языке доступен на  iTunes в пункте  “Developing iOS 7 app:Assignment 4″

На русском языке

Задание 4 Set fall 2013.pdf

 Задание выполнялось в Xcode 7 iOS 9. Режимы «Use Auto Layout» и «Use Size classes» в этом Домашнем задании включены.

Код Задания 4 находится на Github. Ниже представлен мой вариант решения Задания 4. У Вас может быть совсем другая логика построения этих игр.

Читать далее

Stanford CS 193P iOS 7 2014 — Задание 3. Set. (Objective-C)

 Screen Shot 2015-11-02 at 7.31.19 PM

Содержание

Цель задания — улучшить решение, полученное в Задании 2. К вашей игре Matchismo “на совпадение” с игральными картами  вы должны добавить вторую карточную игру, Set. При этом нужно продемонстрировать прием полиморфизма объектно-ориентированного программирования для разделения большей части кода с вашей карточной игрой “на совпадение” с игральными картами Matchismo. Кроме того, вы должны продемонстрировать использование segues и Navigation Controller для показа истории “совпадений” и “несовпадений” карт.

Текст Домашнего задания на английском языке доступен на  iTunes в пункте  “Developing iOS 7 app:Assignment 3″

На русском языке

Задание 3 Set fall 2013.pdf

 Задание выполнялось в Xcode 7 iOS 9. Режим «Size classes» в этом Домашнем задании отключен. Кроме того Autolayout также не использовалась, так как набор карт на игральном столе сложно адаптировать к различным размерам экрана с помощью Autolayout. Только использование специальной «сетки» позволит это сделать, что и будет выполнено в Задании 4.

Код Задания 3 находится на Github.

Пункт 1, 4

1. Добавьте новый MVC к вашему решению Matchismo, полученному на прошлой неделе. Новый MVC должен обеспечить простейший вариант карточной игры “на совпадение” Set. Хорошим решением для этого домашнего задания было бы использование приемов объектно-ориентированного программирования для разделения большей части кода с вашей карточной игрой “на совпадение” с игральными картами Playing Card.

4. Используйте  UITabBarController для представления двух игр в вашем UI на различных закладках.  

Читать далее

Stanford CS 193P iOS 7 Лекция 13 — Core Data и Table View ( + iOS 8 и iOS 9)

 Лекция 13  iOS 7 Objective-C начинается с детального обсуждения финального проекта, который должны разработать студенты Стэнфорда. Это обсуждение представляет интерес только для студентов Стэнфорда и по этой причине в моем конспекте отсутствует.

Затем совсем недолго ( буквально несколько слайдов) следует продолжение теоретической части о том, как Core Data соединяется с UITableView, потому что этот “брак заключен на небесах”. Core Data — это куча объектов, большой граф объектов, а Table Views — реально хороший инструмент для обхода графа объектов. Как нам добиться их взаимодействия? В iOS есть замечательный класс  с именем NSFetchedResultsController. Пол Хэгарти очень подробно рассказывает о тонкостях использования этого класса. В результате рождается класс с именем CoreDataTableViewController, который, с одной стороны реализует все методов UITableViewDataSource,  а с другой стороны — устанавливает себя делегатом для “отслеживания” изменений в Core Data.

Читать далее

Stanford CS 193P iOS 7 Лекция 12 — Documents и Core Data

 Лекция 12 целиком теоретическая и посвящена Core Data.

Начинается с создания Data Model для простейшей задачи с двумя сущностями: Photo и Photographer. Определяются их атрибуты и взаимосвязи. На основе визуальной карты базы данных создаются классы для ManagedObjects: Photo  и Photographer, которые функционируют в контексте ManagedObjectsContext.

Задача получения текущего контекста ManagedObjectsContext решается не традиционным способом через шаблон Core Data ( при создании проекта поставить «галочку»), который выдает кучу кода в AppDelegate.swift, большая часть которого посвящена созданию стэка Core Data, а через UIManagedDocument, который берет на себя все проблемы с созданием стэка Core Data, в том числе ManagedObjectsContext, с безопасностью многопотоковой обработки и т.д. Кроме того, это самый короткий способ перехода к  iCloud.

Рассматривается способ синхронизации множества контекстов ManagedObjectsContexts, указывающих на одну и ту же базу данных, через Notifications.

Создание  subclasses ManagedObjects с помощью Xcode на основе визуальной карты базы данных и использование «точечной нотации» доступа к свойствам, а также наполнение этих  subclasses пользовательскими (custom) методами  через механизм «категорий» ( categories)

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

«Дескрипторы сортировки», «маленький язык» предикатов, составные предикаты, использование агрегатных функций KVC (Key Value Coding).

Выполнение запросов и результаты выборки. Faulting.

 Саму лекцию, а также ее слайды на английском языке можно получить через iTunes с названием “12. Documents and Core Data”.

Русский неавторизованный конспект лекции 12, хронометрированный через каждые 5 минут, представлен в PDF — файлах.

Лекция 12 CS193P Fall 2013 -Winter 2014.pdf

Stanford CS 193P iOS 7 Лекция 11 — UITableView и iPad (UISplitViewController, Popover)

Screen Shot 2015-02-17 at 11.19.32 PM

 Лекция 11 начинается с введения в TableView, ее стилей и элементов, с того, как заполняются ее ячейки путем «закачки» данных ( data sources), как пользователь может взаимодействовать с этой таблицей с помощью делегатов ( delegate ). Рассматриваются  replace и push segues, а также table spinners для refresh control.

Вторая теоретическая часть посвящена созданию универсальных (universal) приложений с добавлением отдельной storyboard и функциональности для iPad, а также специфических для iPad Сontrollers таких, как UISpliViewController и Popovers.

Практическая часть лекции демонстрирует как строится универсальное приложение с использованием  TableViewController и NavigationСontroller для iPhone и с использованием TableViewController и UISplitViewController для iPad. Хотя методы делегата UISplitViewController считаются самыми трудоемкими и обременительными во всем iOS, профессор нашел хитроумный способ как сделать их легкими и понятными. Универсальное приложение связано с просмотром фотографий с Flickr. Поэтому в конце лекции профессор Пол Хэгарти показывает другой способ получения данных с сервера Flickr путем создания собственной очереди и возвращения в main queue при работе с UI, используя  GCD или Grand Central Dispatch. Это более изящный способ, чем URL session, обсуждаемая в предыдущих лекциях.

Код для демонстрационного примера Shutterbug этой лекции доступен  здесь

 Саму лекцию, а также ее слайды можно получить через iTunes с названием “11. Table View and iPad”.

Русский неавторизованный конспект лекции 11 представлен в PDF файлах:

Лекция 11 CS193P Fall 2013 -Winter 2014 1.pdf (0 - 10 минута)

Лекция 11 CS193P Fall 2013 -Winter 2014 2.pdf ( 10 - 20 минута)

Лекция 11 CS193P Fall 2013 -Winter 2014 3.pdf ( 20 - 30 минута)

Лекция 11 CS193P Fall 2013 -Winter 2014 4.pdf ( 30 - 40 минута)

Лекция 11 CS193P Fall 2013 -Winter 2014 5.pdf ( 40 - 60 минута)

Лекция 11 CS193P Fall 2013 -Winter 2014 6.pdf ( 60 минута - конец)

Stanford CS 193P iOS 7 Лекция 10 — Блоки, Многопоточность, Scroll View

Лекция 10 начинается с введение в многопоточность, при этом уделяется  особое внимание тому, как блоки ставятся в очередь (которые затем выполняются на разных потоках) и как запустить длительные по времени задачи без блокировки пользовательского интерфейса  ( UI ) . iOS поддерживает различные APIs – если предыдущие версии этого курса делали акцент на API низкого C уровня, то в этом году появилось Objective-C API и последний в данном курсе предпочтителен.

Вторая часть теории посвящается Scroll Views, как их создать, как добиться скроллинга и zooming (изменения масштаба).

Оставшаяся часть лекции посвящена демонстрационному примеру, который покрывает обе теоретические части: многопоточность и  Scroll Views.

Код демонстрационного примера  «Imaginarium» для этой лекции можно найти на сайте здесь.

Лекция и слайда (английский язык) доступна на  iTunes название “10. Multithreading, Scroll View”.

Русский неавторизованный  конспект Лекции 10, хронометрированный через каждые 5 минут, доступен на

Лекция 10 CS193P Fall 2013 -Winter 2014 1.pdf

Лекция 10 CS193P Fall 2013 -Winter 2014 2.pdf

Лекция 10 CS193P Fall 2013 -Winter 2014 3.pdf

Лекция 10 CS193P Fall 2013 -Winter 2014 4.pdf

Stanford CS 193P iOS 7 Лекция 9 – Анимация и Autolayout (авторазметка)

Лекция 9 начинается с продолжения демонстрации «Dropit» приложения — игры наподобие «Тетрис». Эта демонстрация была начата на прошлой лекции.

Оставшаяся часть лекции посвящена механизму Авторазметки (Autolayout) пользовательского интерфейса и различным способам определения «ограничений» (constraints). Возможности «очень сообразительной» системы Авторазметки показаны в короткой демонстрации  «Attributor Stats».

Код  этой лекции для «DropIt Attach» и «Attributor Stats» доступен  здесь.

Лекция и слайды на английском языке можно получить на iTunes название “9. Animation and Autolayout”.

Русский неавторизованный  конспект Лекции 9, хронометрированный через каждые 5 минут, доступен на

Лекция 9 CS193P Fall 2013 -Winter 2014 1.pdf (0 - 30 минута)

Лекция 9 CS193P Fall 2013 -Winter 2014 2.pdf (30 - 50 минута)

Лекция 9 CS193P Fall 2013 -Winter 2014 3.pdf (50 - конец)

Stanford CS 193P iOS 7 Лекция 8 – Протоколы, Блоки и Анимация

Screen Shot 2015-02-17 at 11.32.48 PMЛекция 8 начинается с очень большой теоретической части.

Протоколы — это способ взаимодействия между не взаимносвязанными проектами, в iOS в основном используются для делегирования функционала (delegates) и «подкачки данных»  (data sources). Протоколы декларируют, какие свойства и методы могут и должны существовать в другом классе, чтобы быть доступны декларирующему протоколы классу.

Блоки (blocks) инкапсулируют куски кода, которые могут передаваться как объекты. Специальное внимание следует уделять коду внутри блоков, который нуждается в доступе к переменным и объектам за пределами блока.

Анимация views может быть выполнена путем анимации их свойств напрямую или  – новое в iOS 7 – на основе «физики» объектов. Если анимируются свойства view, вам необходимо указать время анимации и конечное состояние свойств объекта. Для динамической анимации вы определяете «физические свойства» view и действующие на него силы, возможно, со стороны других views.

Конец лекции — это демонстрация, объясняющая динамическую анимацию более детально на примере игры типа «Тетрис».

Код приложения Dropit для этой лекции доступен  здесь.

Сама лекция, а также слайды на английском языке доступны через iTunes called “8. Protocols, Blocks, and Animation”.

Русский неавторизованный конспект лекции 8, хронометрированный через каждые 5 минут, представлен в PDF — файле.

Лекция 8 CS193P Fall 2013 - Winter 2014 All.pdf

Stanford CS 193P iOS 7 Лекция 7 – Views и жесты

Теоретическая часть Лекции 7 описывает как можно рисовать внутри views с помощью кода и как использовать различные жесты, воспринимаемые этими views. В конце лекции представлена большая и основательная демонстрация «Super Card», показывающая использование всех теоретических приемов рисования и управления жестами.

Код лекции доступен здесь.

Лекция 7 вместе со слайдами на английском языке доступна на  iTunes название “7.Views and Gestures”.

Русский неавторизованный конспект лекции 7, хронометрированный через каждые 5 минут, представлен в PDF — файле.

Лекция 7 CS193P Fall 2013-2014 All.pdf

Можно скачивать по частям:

Лекция 7 CS193P Fall 2013-2014 1.pdf

Лекция 7 CS193P Fall 2013-2014 2.pdf

Лекция 7 CS193P Fall 2013-2014 3.pdf

Лекция 7 CS193P Fall 2013-2014 4.pdf

Stanford CS 193P iOS 7 Лекция 6 – Полиморфизм Controllers и множественные MVCs в приложении, UINavigation, UITabBar

Лекция 6 начинается с короткой демонстрации того, как создавать абстрактные классы ViewController и использовать их для построения subclasses для конкретных карт (например, для игральных карт PlayingCardGameViewController.h, PlayingCardGameViewController.m).

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

Лекция заканчивается объяснением работы TabBarControllers.

Код для этой лекции представлен  для Attributor  здесь, а для Matchismo в Github.

Также коды демонстрационных примеров можно найти на сайте Stanford.

Лекция 6 вместе со слайдами на английском языке доступна на  iTunes название “6. Views and Gestures”.

Русский неавторизованный  конспект Лекции 6, хронометрированный через каждые 5 минут, доступен на

Лекция 6 CS193P Fall 2013-2014 1.pdf (0 -20 минута)

Лекция 6 CS193P Fall 2013-2014 2.pdf (20 - 30 минута)

Лекция 6 CS193P Fall 2013-2014 3.pdf (30 - 50 минута)

Лекция 6 CS193P Fall 2013-2014 4.pdf (50 -70 минута)