Задание 4. Решение — UICollectionView с расположением ячеек типа Pinterest.

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

Задание 4. Решение — дополнительный пункт 6.

Screen Shot 2015-07-13 at 1.36.03 PM

Это третье и последнее продолжение решения Задания 4.
Начало находится в посте Задание 4. Решение — обязательные пункты 1 — 4. 
Первое продолжение находится в посте Задание 4. Решение — обязательные пункты 5 — 10. 
Второе продолжение находится в посте Задание 4. Решение — дополнительные пункты 1 — 5. 
Текст Задания  4 на английском языке доступен на  iTunes в пункте “Developing iOS 8 app: Programming: Project 4″.  Текст Домашнего задания на русском  языке доступен на 

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

Необходимо освоение Лекции 7, Лекции 9Лекции 10,  и Лекции 11
В этом посте подробно описывается выполнение дополнительного пункта 6.
Код для Swift 1.2 находится на Github. Код для Swift 2.0 находится на Github.

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

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

Читать далее

Задание 4. Решение — дополнительные пункты 1- 5.

Screen Shot 2015-07-11 at 9.06.55 PM
Screen Shot 2015-07-12 at 10.17.36 AM
Это второе продолжение решения Задания 4.
Начало находится в посте Задание 4. Решение — обязательные пункты 1 — 4. 
Первое продолжение находится в посте Задание 4. Решение — обязательные пункты 5 — 10. 
Текст Задания  4 на английском языке доступен на  iTunes в пункте “Developing iOS 8 app: Programming: Project 4″.  Текст Домашнего задания на русском  языке доступен на 

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

Необходимо освоение Лекции 7, Лекции 9Лекции 10,  и Лекции 11
В этом посте подробно описывается выполнение дополнительных пунктов 1-5.
Код для Swift 1.2 находится на Github. Код для Swift 2.0 находится на Github.

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

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

Читать далее

Задание 4. Решение — обязательные пункты 5 — 10.

Screen Shot 2015-07-14 at 8.11.31 AMЭто продолжение решение Задания 4. Начало находится в посте Задание 4. Решение — обязательные пункты 1 — 4.
Текст Задания  4 на английском языке доступен на  iTunes в пункте “Developing iOS 8 app: Programming: Project 4″.  Текст Домашнего задания на русском  языке доступен на 

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

Необходимо освоение Лекции 7, Лекции 9Лекции 10 и Лекции 11. Если вы выполните хотя бы все обязательные пункты Задания 4, то работа с TableView, segue и представлением изображения с «подкачкой» данных в параллельной не main queue очереди (concurrent queue) не будет для вас проблемой никогда.
В этом посте подробно описывается выполнение обязательных пунктов 5-10.
Код для Swift 1.2 находится на Github.  Код для Swift 2.0 находится на Github.

Пункты 5 и 6 обязательные

5. Если пользователь выбирает какой-то hashtag или user в таблице “mentions”, созданной в вышеприведенном Обязательном пункте № 2,  то вы должны куда-то “переехать”  (segue), чтобы показать результаты поиска в Twitter этого hashtag или user. Это должен быть поиск именно hashtags или  users, а не просто строки с именем hashtag или user (например, поиск  “#stanford”, а не “stanford”). View Controller, куда вы “переедите” (segue), должен работать точно также, как ваш главный View Controller, показывающий твиты  (TweetTableViewController).

6. Если пользователь кликает на “меншене” url в вашем вновь созданном View Controller, вы должны открыть этот url в Safari (смотри раздел “Подсказки”, приведенный ниже, и узнай как это сделать).

Используем подсказку №15, которая говорит Читать далее

Задание 4. CS193P Winter 2015. Решение — обязательные пункты 1- 4.

Screen Shot 2015-07-14 at 8.43.44 AMТекст Домашнего задания на английском языке доступен на  iTunes в пункте “Developing iOS 8 app: Programming: Project 4″.  Текст Домашнего задания на русском  языке доступен на 

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

 Для выполнения этого Задания необходимо освоение  Лекции 9Лекции 10 и Лекции 11.
В этом посте подробно описывается выполнение обязательных пунктов 1-4.
Код для Swift 1.2 находится на Github. Код для Swift 2.0 находится на Github.

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

Усовершенствуйте приложение Smashtag, полученное на лекции, в части выделения  (разными цветами каждого)  hashtags, urls и user screen names, упомянутых в тексте твита (они известны как “mentions” — меншены). Заметьте, что эти mentions уже обнаружены для вас в каждом твите и представлены как [IndexedKeyword]s в классе Tweet в поставляемом коде Twitter.

Читать далее

Лекция 11 CS193P Winter 2015 — Unwind Segues, Alerts, Timers, View Animation

https://www.youtube.com/watch?v=m63jMyEgmgU

Лекция 11 — чисто теоретическая и начинается она с детального обсуждения финального проекта, который должны разработать студенты Стэнфорда. Обсуждение финального проекта длится почти 30 минут и представляет интерес, наверно, только для студентов Стэнфорда.

Unwind Segue

Это единственный segue, который  в процессе “переезда” не создает новый экземпляр MVC. Этот тип segue очень хорошо подходит для того, чтобы возвращаться назад к любой карте из стэка в Navigation Controller.

Другой случай использования unwind segue связан с MVC, который был представлен модально. Для этого случая  unwind segue подходит как нельзя лучше, потому что альтернативой ему является только делегирование. Однако использование unwind segue в этом случае многократно легче делегирования.

В лекции подробно рассматриваются особенности применения этого segue.

Alerts and Action Sheets

Читать далее

Задание 4 cs193p Winter 2015 Smashtag (Выборка данных из Twitter)

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

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

Для выполнения Задания 4 необходимо освоить материал Лекции 10 и Лекции 11.
В качестве исходного кода для Задания 4 используется код приложения «Smashtag«, полученный на Лекции 10. Код для Демонстрационного примера «Smashtag» и вспомогательный класс «Twitter» доступны на сайте Stanford.
Пол Хэгерти использовал актуальный на тот момент Swift 1.1. Вариант демонстрационного примера «Smashtag» и вспомогательного класса «Twitter»  для Swift 1.2 выложен на том же сайте   Stanford.

Результаты выполнения заданий можно посылать на форум Swift[ru] для обсуждения.

Замыкания вместо делегирования в iOS 8 Swift

Screen Shot 2015-05-26 at 10.19.34 AM

При проектировании iOS приложений со многими MVC приходится решать вопросы передачи информации от одного MVC к другому MVC как в прямом, так и в обратном направлении. Передача информации в прямом направлении при переходе от одного MVC к последующему , осуществляется обычно установкой Mодели того MVC, куда мы переходим, а вот передача информации «назад» из текущего MVC в предшествующий MVC, осуществляется с помощью делегирования как в Objective-C, так и в Swift.
Кроме того, делегирование используется внутри одного MVC между View и Controller для их “слепого взаимодействия” .
Screen Shot 2015-05-25 at 9.44.52 PM
Читать далее

Лекция 10 CS193P Winter 2015 — Table View

Хотя вся Лекция 10 посвящена Table View, начинается она с маленькой темы, посвященной UITextField

UITextField

Пол Хэгерти предупреждает от чрезмерного использования UITextField на iPhone и даже на iPad.

В силу малости клавиатуры на iPhone вам захочется построить пользовательский интерфейс приложения без использования текстового поля. На iPad — ситуация лучше, но даже там пользователи скорее предпочтут что-то выбирать и кликать, чем прибегать к клавиатуре для набора текста. Если вы создадите пользовательский интерфейс с текстовым полем и попробуете что-то напечатать, то подумаете :”А это здорово!” Но это не так, потому что на симуляторе может работать клавиатура вашего компьютера, и UI может показаться действительно замечательным. Но когда пользователь начнет пользоваться вашим приложение, то возненавидит ваш UI. Так что будьте внимательны с UITextField. Но иногда вам абсолютно необходимо получить произвольную строку от пользователя и может понадобиться UITextField.

Читать далее

Элегантный графический калькулятор без делегирования.

Если у вас есть в коде замыкание (closure), оно захватывает любые переменные из внешнего контекста для использования внутри замыкания. Это очень крутая особенность замыканий. Пользуясь этими возможностями, вы можете сделать иногда исключительно элегантный код. Иногда замыкания могут быть лучшей заменой делегированию.

Давайте сделаем такой элегантный код для нашего графического калькулятора. Возьмем в качестве основы графический калькулятор, в котором выполнены все обязательные пункты Задания 3. В посте «Задание 3. Решение -Обязательные задания» рассказано, как построить график в Графическом калькуляторе с помощью делегирования.

Читать далее