CocoaTouch с самого начала создавалась с прицелом на парадигму MVC. Практически все шаблоны, представления и их контроллеры для пользователя уже готовы. Ключевые классы — "UIView" и "UIViewController". Во многих случаях метод "UIView" применим сам по себе — с добавлением элементов пользовательского интерфейса в общий "UIView" в редакторе IB. Для создания собственных функций добавляем подклассы к "UIViewController". Спецификаторы "IBOutlet" позволяют связывать элементы пользовательского интерфейса с представлением, обеспечивая к ним доступ.
А как быть с понятием«Model»? О нем информации я практически не нашел. В уроках по программированию с моделью предпочитают не работать, набирая код непосредственно в контроллерах.
Добившись, как мне показалось, неплохих результатов с реализацией, я предлагаю их здесь для обсуждения и оценки. Изложу вкратце. Я создаю класс "Singleton", расширяющий "NSObject" для моей модели. Потом посредством наблюдения за ключами/переменными узнаю об обновлениях. Это во многом напоминает "ModelLocator" из "Cairngorm", если кому-то приходилось работать с ним во "Flex".
Для начала создадим проект с парой представлений.
Теги ‘разработка’
Одна из привлекательных особенностей интерфейса Cocoa Touch — упрощенная работа с анимацией. В этом уроке я покажу пару простых примеров создания анимации для iPhone. Наша анимация будет выполнять две задачи: перемещать объект на экране и менять его размеры в зависимости от точки касания его пользователем.
Тем, кому еще не приходилось заниматься программированием на iPhone, полезно будет ознакомится с азами здесь, здесь и здесь. В качестве примера приведу также урок из серии Stanford iPhone Development (английский язык), где рассматривались основы анимации движения.
Ниже выложено короткое видео приложения, которое нам предстоит создать. Как уже упоминалось выше, с ним можно делать две вещи. Один щелчок будет перемещать внутреннее представление к точке касания. При двойном касании представление будет перемещаться с изменением размеров. Ориентируясь на точки касания, приложение создавать прямоугольник с фреймом для представления.
Что ж, приступим…
Недавно мы с killnicole(вся вычитка и коррекция), nlugovoi, d9k, cleg и ruguevara(все плюсы — этим товарищам, я всего лишь предложил текст) закончили перевод легендарного, самого цитируемого в программистском сообществе, не устаревающего эссе «Epigrams on Programming». С результатом перевода можно ознакомиться под катом.
В этой статье я расскажу о создании собственной файл модели в Qt. Сразу скажу что модель создавалась под конкретную задачу и не планировалось для широкого использования, так что в ней может и не быть того что вам хочется. Еще хочется добавить что опыт программирования на С++/Qt у меня не столь велик, поэтому вполне готов к комментариям типа: «Ваш код г%вно».
Теперь о том, а зачем собственно…
Известно что в Qt 4 есть две встроенных модели работы с файлами:
QDirModel и
QFileSystemModel.
Однако, эти модели очень медленно работают с большим количеством файлов.
QDirModel так вообще безобразно, у второй дела получше, но даже если сравнивать с виндовым проводником, то все равно отвратительно. Как показало исследование профайлером, при каждом запросе к содержимому папки идет очень долгое ожидание мутекса.
Поэтому было принято решение написать собственную файл модель с блекджеком и шлюхами избавленную от всего лишнего и максимально быстро работающую.
Здравствуй, хабра-сообщество!
Небольшое лирическое отступление
В этот замечательный день всех тех, кому не безразличны такие слова как разработка, код, компиляция и отладка, тех кто в данный момент набирает свою юбилейную 100 миллионную строку кода и тех у кого успешно скомпилировался и запустился первый в жизни «Hello, World!» хочу поздравить с профессиональным праздником. Желаю вам поменьше багов, быстрых компиляторов, взаимопонимания с дебаггером и самое главное, чтобы рядом были люди способные по-достоинству оценить Ваш труд!
А теперь — начнем
Недавно я начал писать свое приложение под WMC.
Заниматься переводом и цитированием SDK скучно и не интересно.
Поэтому сегодня я опишу пошагово создание простого плагина.
Давайте попробуем написать простенькие аналоговые часы.
Если вы разработчик (что вероятнее всего, учитывая факт чтения данной статьи), то, по всей вероятности, у вас уже есть или должна появиться учетная запись в Twitter. В последнее время эта социальная сеть обрела такую популярность, что было бы глупо не интегрировать Twitter тем или иным способом в собственные приложения iPhone.
Сделать приложения более социально ориентированными с помощью Twitter можно разными способами. Например, предусмотрев автоматическое подключение к сети при нахождении определенного предмета в игре или победе над персонажем. При этом все друзья узнают о достижениях пользователя, а вам подобный ход добавит популярности. Кстати, а как насчет создания собственного Twitter-клиента (только не рассчитывайте продать мой урок в App Store).
Twitter предлагает элементарный пользовательский интерфейс, с помощью которого с сетью легко и просто взаимодействовать. В моем персональном блоге я как раз публикую серию статей о создании Twitter-клиента для Mac, кодом из которой мы частично воспользуемся.
Перед началом хочу остановиться ещё на одном моменте: создание интерфейса и установку связей со спецификаторами "IBOutlet" я рассмотрю очень бегло. Если что-то будет непонятно, лучше начать с более простых уроков.
Урок будет базовым: я покажу, как обновлять в Twitter собственный статус, а также создавать приложение, работающее исключительно в альбомной ориентации — два зайца одним выстрелом. Приступим…
Почему бы не представить в магазине приложений свой собственный пазл — как это сделали мы! В этом уроке я поэтапно расскажу о создании такого приложения. Итоговый результат будет выглядеть примерно так, как на фото. Чашку с кофе — и можно приступать.
Как настоящие программисты, для начала остановимся на том, что такое slider puzzle и как его реализовать. Наверное, все помнят детскую игру «пятнашки», где фишки с цифрами нужно было выстроить по порядку. В нашем случае это будут разрозненные фрагменты изображения, которые собираются в единое целое (их на один меньше, чтобы кусочки можно было перемещать). Теперь подумаем, что понадобится, чтобы воплотить такой проект в жизнь.
Для начала потребуется изображение, которое мы разделим на фрагменты. Разместим их в беспорядке, чтобы после снова собрать. Правда перед этим нужно как-то запомнить, где должен находиться тот или иной фрагмент. Для этого введем новый класс, который будет содержать как оригинальное, так и текущее положение каждого фрагмента в матрице (под матрицей понимается сетка, на которой формируется рисунок). Так мы сможем определить, собрал пользователь пазл или нет (сравнив для каждого фрагмента текущее положение с исходным). Следующая задача — определить разрешенные перемещения. Для этой цели заменим один из фрагментов пустым. На его место разрешается передвинуть соседний фрагмент. Ну вот, в принципе, и все. Если я что-то упустил, разберемся по ходу дела.
Для начала — что такое WiX? Технология WiX (Windows Installer XML) представляет собой набор инструментов и спецификаций упрощающих процесс создания дистрибутивов на базе MSI (Microsoft Installer). Если объяснять проще то это обертка вокруг MSI с человеческим лицом.
На мой взгляд изучать проще всего на простых примерах. В данной статье я приведу пример простейшего инсталлятора.
Здравствуйте уважаемые читатели сайта. Предлагаю вам на суд эту статью, в которой рассказывается об ошибках, которые допускают дизайнеры приложений для iPhone и iPod Touch. Сразу хочу подчеркнуть, что этот текст не является 100%-ной истинной и лично я с некоторыми мыслями автора не совсем согласен. Приятного чтения надеюсь, вам будет интересно.
Разработка приложений для iPhone не так давно стала одной из самых горячих тем в iPhone сообществах. Каждый пытается найти какую-то креативную идею и продать свое приложение тысячам пользователям. Однако, многие из этих приложений плохо продуманы и поэтому не представляют для пользователя никакого интереса и не предлагают ничего полезного.
Мы хотим повнимательнее взглянуть на дизайн приложений для iPhone и продемонстрировать хорошие и плохие примеры реальных программ, чтобы дать вам полезные советы и рекомендации по созданию действительно стоящего дизайна и пользовательского интерфейса.
Действительно ли приложения iPhone не отличаются качеством?
“Это же всего 99 центов. Ну и что, что полный отстой? Просто попробую”. Сколько раз вы повторяли это себе, решив загрузить очередное многообещающее приложение. А сколько экранов занимают приложения на вашем iPhone? 4? 6? 10? И сколько из них вы реально используете?
По статистике, в среднем, только 3% людей, которые загружают приложение используют его по истечении 30 дней. Почему так происходит? Потому что большинство программ не несет никакой полезной нагрузки, для пользователя. Аналогичная ситуация была и с программами для ПК несколько десятилетий назад. Видимо на ошибках мы не учимся.
В Сидней практически пришла зима — и я умудрился подхватить грипп (простой, не свиной). А тут еще работа, день Матери и пр. и пр. Одним словом, ввиду недостатка времени двигаться будем быстро. Но прежде чем приступать к созданию «уникального» трехмерного мира, освоим концепции перемещения в 3D пространстве.
Нам предстоит освоить код обработки событий, который позволит ходить «по полу». С помощью касаний мы будем поворачивать влево, вправо, перемещаться вперед и назад. Обойдемся без бега, поворотов головы и наведения резкости, хотя добавить их легко. Подобные ограничения объясняются как желанием упростить изложение, так и возможностью для не располагающих iPod Touch или iPhone добиваться аналогичных результатов в симуляторе.
Для начала загрузим основу проекта здесь.
Кода там не много — в основном объяснения, что и как происходит.
Мифическая камера
Большинство воспринимает 3D миры как пространство, на которое смотришь через камеру, но в OpenGL камеры как таковой нет. Для иллюзии движения по сцене относительно начальной точки (0, 0, 0) перемещаются объекты, а не камера, как в кино.
Процесс может показаться трудоемким, но это не так. В зависимости от приложения есть множество способов решения данной задачи и еще больше — оптимизации для действительно больших миров. На этом я вкратце остановлюсь чуть позже.
Чтобы немного упростить работу, к уроку я приложил удобную игрушку от «большого брата» OpenGL ES — библиотеки GLU: я имею в виду функцию "gluLookAt()".