Как запустить NSRunLoop на новом (не главном) потоке

NSRunLoop — достаточно старая технология, появившаяся еще с iOS 2.0, позволяющая оптимизировать использование вычислительных ресурсов в рамках одного потока.
Тем не менее, многие классы фреймворка Cocoa Touch все ещё используют NSRunLoop, и в некоторых случаях требуется запустить NSRunLoop на другом, не главном, потоке. Continue reading «Как запустить NSRunLoop на новом (не главном) потоке»

Вывод даты в AM/PM c использованием NSDate

При разработке iOS-приложений для иностранных клиентов часто необходимо выводить значение времени не в 24-часовом формате, а в 12 часовом формате с указанием дополнительных символов AM/PM.

Решить указанную задачу позволит использование классов NSDate и NSDateFormatter. Continue reading «Вывод даты в AM/PM c использованием NSDate»

Вращение картинки с использованием Core Animation

Довольно часто при разработке под iOS или OS X требуется анимировать вращение определенной картинки/изображения (под картинкой/изображением в данной статье подразумевается экземпляр класса UIImageView), например, при создании «кастомного» индикатора активности, нарисованного с использованием углового(конусного) градиента, который обозначает процесс загрузки.

Вращение картинки достаточно просто реализуется с использованием фреймворка Core Animation следующим образом (пример представлен на языке Swift):

  1. Создаем property класса (скорей всего это будет наследник класса UIViewController) типа CABasicAnimation, а также имя нашей анимации:

Continue reading «Вращение картинки с использованием Core Animation»

Key Value Observing(KVO) и многопоточность

При разработке под iOS, наблюдение за изменением значения определенного свойства (property), так называемое KVO, имеет свои особенности в случае, если iOS-приложение работает с несколькими потоками.

При разработке одного из приложений, связанного с использованием Bluetooth, потребовалось подписаться на изменения property CBPeripheral state класса типа CBPeripheral (периферийное Bluetooth устройство). Continue reading «Key Value Observing(KVO) и многопоточность»

Auto Layout и настройка ограничителей (constraints) через код

В этой статье хотелось бы поделиться некоторыми практическими аспектами и советами при настройке через код (программным путем) ограничителей (constraints) технологии Auto Layout при разработке под iOS:

  1. Установливаем property UIView: translatesAutoresizingMaskIntoConstraints = NO, что позволит избежать массы проблем, связанных с автоматической генерацией ограничителей из Autoresizing Masks (технология, которые применялась при верстке до появления AutoLayout).

    В документации четко указано, что если необходимо использовать Auto Layout для динамического подсчета размера и позиции определеного UIView, то необходимо установить вышеуказанное property в NO и обеспечить добавление необходимых ограничителей (constraints). 

  2. Добавляем UIView как subview на другое UIView, прежде чем применять ограничители (constraints).

Continue reading «Auto Layout и настройка ограничителей (constraints) через код»

HTTPMaximumConnectionsPerHost и ограничение параллельных загрузок

В одном из проектов при разработке приложения под iOS-устройства потребовалось ограничить максимальное количество параллельных загрузок c использованием класса NSURLSession.

Настройка конкретного экземпляра класса NSURLSession осуществляется с помощью класса NSURLSessionConfiguration, который позволяет сконфигурировать конкретную сессию.

Экземпляр класса NSURLSessionConfiguration имеет свойство (property): Continue reading «HTTPMaximumConnectionsPerHost и ограничение параллельных загрузок»

Отличие методов load и initialize при инициализации NSObject и их наследников

При разработке приложений под iOS с использованием языка Objective C, каждый экземпляр класса инициализируется путем сочетания методов alloc и init (либо непосредственно, либо путем использования метода new, либо путем использования фабричных методов, либо литералов (NSString *string = @»My string»).

В то же время доступны методы, которые используются для инициализации классов (следует помнить, что в Objective C класс — это тоже объект):

  1. +(void)initialize; — вызывается только один раз для каждого класса перед отправкой ему первого сообщения

  2. +(void)load; — вызывается каждый раз, когда класс или категория добавляется на runtime Objective-C.

Continue reading «Отличие методов load и initialize при инициализации NSObject и их наследников»

Как добавить шрифт в свое iOS-приложение

В данной статье будет рассказано о том, как добавить шрифт в iOS-приложение при использовании среды разработки Xcode.

Необходимость добавления своего (созданного самостоятельно, найденного в интернете или купленного) шрифта обусловлено тем, что не все шрифты, которые доступны для использования в Xcode, могут удовлетворить требованием технического задания по разработке конкретного приложения и в некоторых случаях требуется использовать «кастомный», отсутствующий в системе, шрифт.

Например, мы хотим чтобы в iOS-приложении был доступен шрифт, использующийся в канцелярских калькуляторах, как показано на скринсшоте ниже.

iphone5s_customFont

Для того чтобы добавить шрифт в проект Xcode и сделать его доступным в своем приложении, необходимо выполнить следующие действия: Continue reading «Как добавить шрифт в свое iOS-приложение»

Не получается добавить UIScreenEdgePanGestureRecognizer?

У Вас не получается добавить UIScreenEdgePanGestureRecognizer на UIView или его класс-потомок при разработке приложений под iOS (iPhone, iPad)?

В данной статье будет описана одна из проблем при использовании UIScreenEdgePanGestureRecognizer.

Следует напомнить, что UIScreenEdgePanGestureRecognizer — это разновидность (с программной точки зрения — класс-потомок) распознавателя жестов Pan (или Drag), которая позволяет распознать pan-жесты, начатые с одного из краев UIView.

Этот класс используется, например, в браузере Safari на iOS, в котором можно вернуться на предыдущую веб-страницу, сделав pan-жест, начав с левого края экрана. Continue reading «Не получается добавить UIScreenEdgePanGestureRecognizer?»

Synx — утилита для упорядочения файловой структуры проекта Xсode

При разработке под iOS или OS X Xcode предоставляет возможность создавать группы и перемещать отдельные файлы проекта в эти группы, что улучшает удобочитаемость проекта и позволяет быстрее находить необходимые файлы. Например, я в своих проектах стараюсь группировать файлы, исходя из их принадлежности в соответствии с паттерном MVC, создавая отдельные группы для классов модели(Model), контроллеров (View Controllers) и видов (Views).

В проекте Xcode группы являются, по сути, аналогом директорий (папок) в файловой системе, которые помогают надлежащим образом упорядочить данные, хранящиеся на диске. Continue reading «Synx — утилита для упорядочения файловой структуры проекта Xсode»