Фантастическое распознавание рукописного текста в реальном времени с помощью Vision, Apple Pencil и SwiftUI, но есть нюансы. 

Apple Pencil превратил iPad в мощный инструмент для создания заметок и творческого самовыражения. А как насчет превращения рукописных каракулей в пригодный для использования цифровой текст? Для разработчиков SwiftUI фреймворк Vision от Apple предлагает надежное решение на устройстве для оптического распознавания символов (OCR), которое бесшовно интегрируется с PencilKit, чтобы оживить распознавание рукописного ввода.

Итак, PencilKit — для ввода рукописного текста, Vision — для его распознавания, SwiftUI — для UI. 

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

Волшебство происходит благодаря сотрудничеству двух основных фреймворков Apple:

  1. PencilKit (PKCanvasView): этот фреймворк предоставляет доску для рисования. Она позволяет пользователям писать и делать наброски естественным образом с помощью Apple Pencil или пальца, фиксируя эти данные как PKDrawing данные — векторное представление Strokes.
  2. Vision (VNRecognizeTextRequest): как только рукописный текст захвачен, Vision берет управление на себя. VNRecognizeTextRequest специально разработан для анализа изображений и идентификации текстового контента, включая сложный рукописный текст.

“Мост” между двумя Мирами: внедрение PKCanvasView в SwiftUI

Поскольку PKCanvasView является компонентом UIKit, для его интеграции в SwiftUI приложение требуется UIViewRepresentable. Эта структура действует как жизненно важный “мост”, позволяя SwiftUI управлять и отображать UIKit Views. Класс class Coordinator обычно сопровождает UIViewRepresentable для взаимодействия с методами делегатов из PKCanvasView, в частности, canvasViewDrawingDidChange(_:), который сигнализирует о том, что пользователь обновил рисунок drawing.

Читать далее

Создание SwiftUI iOS приложения “Карта с поиском”  в тандеме с ИИ Gemini 2.5 Pro Experimental 

iOS 17 принесла разработчикам SwiftUI настоящий подарок от MapKit — кучу новых фишек, которые не потребуют никаких шаманских бубнов и костылей из UIKit

  • новый Map (position:selection:content:) задает положение камеры position и отслеживает  выбор selection на карте,
  • внутрь карты Map можно добавлять аннотации, маркеры, полигоны, маршруты через обычный SwiftUI DSL (ForEach, Marker, Annotation и т.д.), который называется MapContentBuilder и позволяет строить карты декларативно, как обычный View,
  • LookAroundPreview (аналог панорам улиц) можно показать для конкретной точки на карте,  
  • теперь стандартные элементы управления картой добавляются через модификаторы: компас .mapControl(.compass), пользователь mapControl(.userLocation), масштабная линейка .mapControl(.scaleView),
  • данные поисковых подсказок  MKLocalSearchCompletion теперь легко попадают в SwiftUI через @State.

Чтобы разобраться с новыми API, я решила поработать с небольшим скромным iOS приложением, которое описывается в посте Building a searchable map with SwiftUI and MapKit  (перевод этого поста на русский находится здесь) вместе с блестящим ИИ от Google, Gemini 2.5 Pro Experimental, чтобы привести его в работоспособное состояние.

Читать далее