Задание 4. CS193P Winter 2017. Smashtag Mentions (клиент Twitter). Решение — дополнительный пункт 6. UICollectionView с расположением ячеек типа WaterFall и переключение между Layouts.

Класс UICollectionView отличается UITableView наличием свойства UICollectionViewLayout, которое отвечает за расположение (layout) ячеек в двухмерным пространстве, не заботясь о содержимом этих ячеек. По умолчанию работает расположение (layout)  UICollectionViewFlowLayout, которое действует наподобие размещения текста по строкам слева направо с переносом на другую строку. Именно этот layout мы использовали при выполнении дополнительного пункта 6 Задания 4. Но есть очень привлекательное расположение ячеек, которое организует их по столбцам таким образом, чтобы они как можно плотнее заполняли все пространство. Это так называемый стиль Pinterest или еще его называют «анти-Тэтрис» или Waterfall (водопад). Выше на рисунке цифрами показан порядок заполнения ячеек в случае обычного Flow и Waterfall расположения ячеек, и мы видим, что последний уплотняет расположение ячеек, давая снизу появиться новым ячейкам.
Алгоритм расположение очень прост: каждая следующая ячейка располагается в столбце, наименее занятом по вертикали,  c соответствующим Aspect ratio.  Класс CHTCollectionViewWaterfallLayout, реализующий этот алгоритм расположения ячеек в Collection View представлен в Github. Давайте попробуем использовать его в решении Задания 4.

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

Читать далее

Задание 4. CS193P Winter 2017. Smashtag Mentions (клиент Twitter). Решение — дополнительный пункт 6. UICollectionView и перемещение ячеек.

Содержание

Текст Домашнего Задания 4 на английском языке доступен на  iTunes в пункте “Programming: Project 4: Smashtag Mentions″На русском языке вы можете скачать здесь:

Задание 4 iOS 10.pdf

iOS 10 Задания


В Задании 4 вы должны усовершенствовать приложение Smashtag, которое мы создали на Лекции 9, чтобы обеспечить быстрый доступ к хэштэгам hashtags, URLs urls, изображениям images и пользователям users, упомянутым в твите. Основными идеями в этом Задании являются многопоточность, работа с таблицей Table View, глубокое знание Navigation Controller, множественные MVC типа Tab Bar Controller и работа с изображениями с помощью Scroll View.

Основой для решения Задания 4 является демонстрационный пример «Smashtag L9«, код которого доступен как на  iTunes название “Lecture 9 Demo Code: Smashtag«, так и на Github.

В данном посте представлено решение Дополнительного пункта 6 Задания 4. Код можно найти на Github.

Начало решения Задания 4 находится в постах:

Задание 4 CS193P Winter 2017. Smashtag Mentions (клиент Twitter). Решение — обязательные пункты 1- 7.
Задание 4. CS193P Winter 2017. Smashtag Mentions (клиент Twitter). Решение — обязательные пункты 8 — 10.

Задание 4. CS193P Winter 2017. Smashtag Mentions (клиент Twitter). Решение — дополнительные пункты 1-5.

Код для Обязательных пунктов 1- 7 находится на Github.
Код для Дополнительного пункта 6 находится на Github.

Пункт 6 дополнительный

Добавьте некоторый UI элемент, который показывает новый View Controller, отображающий UICollectionView всех первых изображений (image) (или, если хотите, всех images) во всех твитах, которые удовлетворяют условиям поиска.  Когда пользователь кликает на изображении (image) в этом UICollectionView, “переезжайте” (segue) на показ этого Tweet (даже если вы будете показывать один Tweet, вам все равно следует использовать ваш TweetTableViewController и тогда вам будет доступна функциональность “преследования mentions”).

Читать далее

Задание 4. CS193P Winter 2017. Smashtag Mentions (клиент Twitter). Решение — дополнительные пункты 1-5.

Содержание

Текст Домашнего Задания 4 на английском языке доступен на  iTunes в пункте “Programming: Project 4: Smashtag Mentions″На русском языке вы можете скачать здесь:

Задание 4 iOS 10.pdf

iOS 10 Задания


В Задании 4 вы должны усовершенствовать приложение Smashtag, которое мы создали на Лекции 9, чтобы обеспечить быстрый доступ к хэштэгам hashtags, URLs urls, изображениям images и пользователям users, упомянутым в твите. Основными идеями в этом Задании являются многопоточность, работа с таблицей Table View, глубокое знание Navigation Controller, множественные MVC типа Tab Bar Controller и работа с изображениями с помощью Scroll View.

Основой для решения Задания 4 является демонстрационный пример «Smashtag L9«, код которого доступен как на  iTunes название “Lecture 9 Demo Code: Smashtag«, так и на Github.

В данном посте представлено решение Дополнительных пунктов 1 — 5 Задания 4. Код можно найти на Github.

Начало решения Задания 4 находится в постах:

Задание 4 CS193P Winter 2017. Smashtag Mentions (клиент Twitter). Решение — обязательные пункты 1- 7.
Задание 4. CS193P Winter 2017. Smashtag Mentions (клиент Twitter). Решение — обязательные пункты 8 — 10.

Код для Обязательных пунктов 1- 7 находится на Github.
Код для Обязательных пунктов 1- 10 находится на Github.
Код для Дополнительных пунктов 1- 5 находится на Github.

Пункт 1 дополнительный

В секции Users вашего нового UITableViewController представьте список не только пользователей, users, упомянутых в твите, но также и пользователей users, пославших твит в первое место.

Читать далее

Задание 4. CS193P Winter 2017. Smashtag Mentions (клиент Twitter). Решение — обязательные пункты 8 — 10.

Содержание

Текст Домашнего Задания 4 на английском языке доступен на  iTunes в пункте “Programming: Project 4: Smashtag Mentions″На русском языке вы можете скачать здесь:

Задание 4 iOS 10.pdf

iOS 10 Задания


В Задании 4 вы должны усовершенствовать приложение Smashtag, которое мы создали на Лекции 9, чтобы обеспечить быстрый доступ к хэштэгам hashtags, URLs urls, изображениям images и пользователям users, упомянутым в твите. Основными идеями в этом Задании являются многопоточность, работа с таблицей Table View, глубокое знание Navigation Controller, множественные MVC типа Tab Bar Controller и работа с изображениями с помощью Scroll View.

Основой для решения Задания 4 является демонстрационный пример «Smashtag L9«, код которого доступен как на  iTunes название “Lecture 9 Demo Code: Smashtag«, так и на Github.

Начало решения Задания 4 находится в посте Задание 4. CS193P Winter 2017. Smashtag Mentions (клиент Twitter). Решение — обязательные пункты 1- 7.

В данном посте представлено решение Обязательных пунктов 8 — 10 Задания 4.

Код для Обязательных пунктов 1- 7 находится на Github .
Код для Обязательных пунктов 1- 10 находится на Github.

Пункты 8 обязательный

Сохраняйте недавние 100 поисков в Twitter, которые пользователь выполнил в вашем приложении. Добавьте UITabBarController к вашему приложению с одной закладкой для поиска (то есть ваш главный UI) и второй закладкой, показывающей недавние поисковые термины, используемые для поиска в вашей таблице (они должны быть уникальны и первыми должны быть самые новые). Когда пользователь кликает на поисковом термине во второй закладке, “переезжайте” (segue) (оставаясь в той же самой закладке) куда-то, чтобы показать самые свежие твиты, соответствующие этому поисковому термину. Запомните эти недавно выполненные поисковые термины в постоянном хранилище, так чтобы ваше приложение не забывало их в случае повторного старта приложения.

Читать далее

Задание 4. CS193P Winter 2017. Smashtag Mentions (клиент Twitter). Решение — обязательные пункты 1- 7.

Содержание

Текст Домашнего Задания 4 на английском языке доступен на  iTunes в пункте “Programming: Project 4: Smashtag Mentions″На русском языке вы можете скачать здесь:

Задание 4 iOS 10.pdf

iOS 10 Задания


В Задании 4 вы должны усовершенствовать приложение Smashtag, которое мы создали на Лекции 9, чтобы обеспечить быстрый доступ к хэштэгам hashtags, URLs urls, изображениям images и пользователям users, упомянутым в твите. Основными идеями в этом Задании являются многопоточность, работа с таблицей Table View, глубокое знание Navigation Controller, множественные MVC типа Tab Bar Controller и работа с изображениями с помощью Scroll View.

Основой для решения Задания 4 является демонстрационный пример «Smashtag L9«, код которого доступен как на  iTunes название “Lecture 9 Demo Code: Smashtag«, так и на Github.

В данном посте представлено решение Обязательных пунктов 1 — 7 Задания 4.
Код можно найти на Github.

Продолжение решения Задания 4 находится в посте Задание 4. CS193P Winter 2017. Smashtag Mentions (клиент Twitter). Решение — обязательные пункты 8 — 10.

Для того, чтобы начать с проекта, который профессор демонстрировал на Лекции 9, вам нужно создать workspace (рабочее пространство) в Xcode, которое содержит оба проекта:  Smashtag L9 project c Лекции 9 и поставляемый профессором Twitter фреймворк project. Так получилось, а может быть это сделано специально для учебных целей, но эти два проекта находятся в разных местах:  Smashtag L9 находится на  iTunes название “Lecture 9 Demo Code: Smashtag«или на Github, а ссылка на проект для фрейворка Twitter дана непосредственно в

Задание 4 iOS 10.pdf

 и может быть скачан отсюда. Вы должны создать рабочее пространство workspace в Xcode, поместить туда два ваши проекта и установить между ними связь. Поэтому в Задании 4 у нас появился отдельный этап — подготовка, которая описывается в подсказках № 2 и 3 Задания 4.

Подготовка

Подсказка № 2. Помните, что вы должны создать workspace в Xcode, который содержит оба проекта: ваш Smashtag project и поставляемый Twitter фреймворк project. Оба проекта должны быть равноправны (siblings) (не должно быть отношение наследования одного по отношению к другому) в рабочем простанстве (workspace)
Подсказка № 3. Вам необходимо перетянуть Twitter фреймворк (из навигационной панели вашего рабочего пространсва workspace) на закладку General установок (Settings) вашего Smashtag Project в раздел Embedded Binaries.

Читать далее

Лекция 9 CS193P Winter 2017 — Table View (табличное представление данных).

Вся Лекция 9 посвящена единственной и очень важной теме — визуальной таблице Table View, которая является  в iOS основным способом отображения и взаимодействия с большими наборами данных. Таблица Table View изначально настроена на отображение очень большого объема данных (сотни тысяч и более строк) и использует эффективный механизм формирования очереди повторно используемых ячеек (Dequeue Reusable Cell) и делегирование dataSource для загрузки динамических данных. Помимо ДИНАМИЧЕСКИХ таблиц  профессор рассказывает и демонстрирует возможности СТАТИЧЕСКИХ таблиц, больше пригодных для всевозможного рода настроек (Settings).

Первая часть Лекции 9 представляет целый спектр проблем, связанных как со структурой и составными частями Table View, так и с использованием подкачки данных в таблицу из интернета в многопоточной среде. В условиях, когда ячейки в таблице Table View «уходят» и «приходят» на экран, а также повторно используются в целях эффективности, законы «Мира многопоточности» проявляют себя в полную силу. Пол Хэгерти показывает две вещи, которые вы все должны учитывать в условиях многопоточности.

Читать далее

Лекция 8 CS193P Winter 2017 — Multithreading и Text Field (Многопоточность и текстовые поля)

Судя по названию, основными темами Лекции 8 являются:

  1. Многопоточность,
  2. Текстовые поля,

но очень значительная часть Лекции 8 посвящена также усовершенствованию функциональных возможностей демонстрационного приложения Cassini по следующим направлениям :

  • использование множественного MVC Split View Controller в сочетании с парой Navigation Controllers для обеспечения функционирования на iPhone и iPad
  • применение extension для расширения возможностей класса UIViewController
  • тонкости использования индикатора активности  (Activity Indicator) в виде маленького вращающегося «колесика» для визуализации занятости системы
  • использование делегата UISplitViewController для управления появлением Detail или Master

В результате получился универсальный, подходящий на все случаи жизни, как в дальнейшем покажет практика, MVC для показа изображений по их URL —  ImageViewController. Огромный объем изображений NASA, задействованных в демонстрационном приложении Cassini , наглядно показывает необходимость использования многопоточности.
Читать далее

Лекция 7 CS193P Winter 2017 — Обработка ошибок, Extensions, Протоколы, Делегирование и Scroll View.

В Лекции 7 рассматривается ряд важных тем :

  • Обработка ошибок в Swift
  • Расширения
  • Протоколы
  • Делегирование
  • Scroll View

Проектировщики языка Swift действительно усвоили уроки некоторых других языков программирования, в которых режим обработки ошибок слишком усложнен, поэтому Swift использует очень простой механизм для обработки ошибок. Рассматриваются методы с ключевым словом throws в конце декларирования, операторы try, try! и try?,  а также обработка ошибок с помощью блока do { } catch let error { }.

Далее следует рассказ о синтаксической возможности в Swift, которая называется extension (расширение). Расширение extension позволяет добавлять методы и свойства в другие классы, даже если у вас нет исходного кода этих  классов. Пол Хэгерти демонстрирует очень прагматичный пример использования extension для класса UIViewController, которое упрощает использование  Navigation Controller в Split View Controller. Далее он также будет использовать extension для подтверждения и реализации протокола UIScrollViewDelegate.

Читать далее

Задание 3 cs193p Winter 2017 «Графический» Калькулятор. Решение. Дополнительные пункты.

Это решение Задания 3 cs193p Winter 2017 Графический Калькулятор — дополнительные пункты.

Обязательные пункты Задания 3, а также ссылки на текст самого Задания 3 можно посмотреть здесь:
Задание 3 cs193p Winter 2017 Графический Калькулятор. Решение обязательных пунктов.
Код можно посмотреть на Github:

  • отдельный Графический MVC находится на Github.
  • обязательные пункты находится на Github.
  • дополнительные пункты  — Github.

Пункт 1 дополнительный

У вас должна быть “графическая” кнопка в вашем основном экранном фрагменте Calculator, отражающая возможность построения графика по тем данным, которые введены в Калькулятор (например, является ли ваш результат отложенным (pending) или нет). Вам просто нужно сделать ее неработоспособной в этом случае, но, может быть, есть и другие случаи для такой неработоспособности: например, другой график или что-то еще? Это очень легкая задачка, которая не потребует много дополнительного кода!

Читать далее

Задание 3 cs193p Winter 2017 «Графический» Калькулятор. Решение. Обязательные пункты.

Содержание

Текст Домашнего задания на английском языке доступен на  iTunes в пункте “Programming: Project 3: Graphing Calculator″На русском языке вы можете скачать  текст Задания 3 здесь:

Задание 3 iOS 10.pdf

В Задании 3 вы должны усовершенствовать свой калькулятор Calculator в плане создания графика для того, что пользователь ввел в ваш калькулятор. Этот график может масштабироваться (zoom in) с помощью жеста pinch и перемещаться по экрану с помощью жеста pan. Ваше приложение теперь будет работать не только на iPhone,  но также и на iPad.
Для успешного выполнения Задания 2 нужно изучить материалы Лекции 5Лекции 6 и Лекции 7.

Мое решение Задания 3 cs193p Зима 2017 г. находится на Github:

Код для отдельного Графического MVC на Github.
Код для обязательных пунктов находится на Github.
Код для обязательных и дополнительных пунктов находится на Github.

В данном посте представлено выполнение обязательных пунктов Задания 3.

На Лекции 5 и в подсказке №8 Задания 3 рекомендуется:

Это Задание стало доступно перед Лекцией, на которой демонстрируется как использовать множественные MVCs в вашем приложении. Вы можете начать выполнять это Задание перед Лекцией (которую очень рекомендую!) и подумать о том, чтобы создать абсолютно новое приложение, в котором находится единственный MVC: ваш новый графический MVC. Просто выберите некоторую удобную для рисования функцию с целью отладки приложения (например, cos(x) ). Затем после следующей Лекции, когда вы изучите как обращаться с множественными MVCs, вы можете просто добавить ваш повторно используемый графический MVC (включая его повторно используемый UIView) в приложение “Графический Калькулятор” для Задания № 3.

Поэтому мы будем выполнять обязательные пункты Задания 3 не в порядке нумерации.

Читать далее