Коротко и ясно о разработке на C#, Java, Swift. Под Android, iOS, WinForms и Unity

Самые комментируемые за месяц

Пример использования Обобщений (Generics) в C#

3 января 2015, 13:43

Давеча потребовалось реализовать инфраструктуру объектов-оберток для редактора роллет.


Исходная задача была следующей:
— Есть построитель роллет, который имеет ряд коллекций с объектами разных типов, описывающими один из элементов роллеты (привод, направляющая, ламель и т. п.)
— Необходимо реализовать логику расчета роллеты по уже заполненному списку параметров
— Внутренние типы построителя наследуются от базового класса RollCalc.Model.CommonProperties


Для упрощения реализации было решено создать свой набор объектов, описывающих каждый из элементов роллеты, чтобы не иметь жесткую связь с внутренними объектами редактора (ибо работать с ними было весьма не удобно). В своих объектах можно реализовать любой набор методов и свойств, которые существенно облегчат расчет и избавят нас от хардкода.
Естественно создавать свои объекты и заполнять их базовые свойства нужно по внутренним коллекциям редактора и желательно парой строчек кода. Пожалуй в данной ситуации наилучший выход — использовать обобщения языка C#. Они позволят нам написать бизнес логику один раз и использовать ее для разных классов (логика-то сходная).

Настройка Ubiquiti UniFi для работы без контроллера

26 июня 2015, 18:28

Сегодня пост немного не по тематике блога, но считаю информацию очень важной. Я в качестве хобби немного занимаюсь системным администрированием, на текущем объекте необходимо настроить Wi-Fi, при этом важно чтобы «брало везде» (трехэтажный дом и летняя кухня — отдельная постройка), к тому же, чтобы еще был бесшовный роуминг клиента между точками доступа.

Использование QLPreviewController для просмотра файлов (iOS)

13 января 2016, 22:10

Для реализации просмотра файлов различных форматов (изображения, word, excel, txt, медиа и т. п.) в iOS существует очень удобный класс QLPreviewController. Для его удобного использования необходимо сделать следующее:


  1. Создать класс-наследник QLPreviewController, который инкапсулирует все детали реализации
  2. Создать класс QLPreviewControllerDataSource, который будет являться источником данных для контроллера
  3. Создать классы-наследники QLPreviewItem, которые будут хранить информацию о просматриваемом элементе

Преобразование файла интерфейса Storyboard из формата экрана iPhone в iPad

11 ноября 2015, 0:15

Рано или поздно при разработке приложения под iPhone возникает необходимость адаптировать интерфейс приложения под iPad. Если приложение большое создавать интерфейс под планшет с нуля может оказаться весьма накладным по времени и ресурсам делом.


Чтобы облегчить себе труд можно создать файл с интерфейсом для iPad из файла интерфейса iPhone. Для этого необходимо выполнить следующие шаги:


  1. Дублируем файл MainStoryboard_iPhone.storyboard и переименовываем дубль в MainStoryboard_iPad.storyboard
  2. Открываем наш файл обычным текстовым редактором (рекомендую для этого использовать SublimeText2) и ищем следующий атрибут: targetRuntime=«iOS.CocoaTouch», дописываем в конце значения этого атрибута “.iPad”, должно получиться вот так: targetRuntime=«iOS.CocoaTouch.iPad»
  3. Далее если присутствует тег “simulatedScreenMetrics” удаляем в нем атрибут “type” со значением “retina4”
  4. Далее пробегаемся автозаменой по файлу и заменяем значения ширин и высот экрана iPhone на значения экрана iPad (например width=«320» => width=«768», height=«568» => height=«1024»)
  5. Сохраняем Storyboard, открываем ее в Interface Builder, корректируем положения экранов и лэйауты элементов

Таким не хитрым образом мы быстро получили вариант интерфейса для iPad из интерфейса iPhone.

Работа с AVAudioPlayer и MPNowPlayingInfo (iOS)

18 января 2016, 23:11

В ходе разработки приложений под iOS часто возникает необходимость проиграть аудио-файл, например композицию или эффект. Наиболее простым способом для этого в iOS является использование класса AVAudioPlayer. Он является частью фреймворка AVFoundation, так что нам потребуется поставить на него using.

Ниже представлен код хэлпера, упрощающего работу с этим классом.