1 of 29

НЕ ОДНИМИ�iOSами

Алексей Шабров

яблочная разработка полна

#НесухиеДоклады #силацвт

2 of 29

Алексей Шабров

iOS-разработчик�ЦВТ

Образование

ИжГТУ, Программная инженерия

Опыт

iOS 9 лет

Apple TV 4 года

3 of 29

Команда

В начале

Тимлид

Разработчики�2 шт

Тимлиды�2 шт

Сейчас

Я

главный разработчик

Джун

iOS/tvOS Разработчики�12 шт

4 of 29

Архитектура

View

Presenter

Wireframe

Interactor

Data Store

Enity

Enity

5 of 29

tvOS vs iOS

  • Способ управления
  • Полное отсутствие WebKit
  • Ограниченный набор размеров экрана

6 of 29

Фокус

7 of 29

Выбор элемента �для фокуса

В общем случае

  • удовлетворяет протоколу UIFocusItem
  • canBecomeFocused == true
  • frame в видимой области иерархии

Для UIView

  • isHidden == false
  • alpha > 0
  • isUserInteractionEnabled == true

8 of 29

Как задать �нужный элемент �для фокуса

  • переопределить свойство preferredFocusEnvironments (например в подклассе UIViewController или UIView)
  • вернуть предпочитаемые элементы для фокуса в порядке приоритета

9 of 29

Программное �обновление �фокуса

  • вернуть �в preferredFocusEnvironments нужный элемент
  • вызывать setNeedsFocusUpdate() �и updateFocusIfNeeded()
  • предыдущий элемент �в фокусе должен быть �внутри иерархии

10 of 29

Фокус

11 of 29

Фокус

12 of 29

UIView�Controller

  • умеет запоминать �и восстанавливать фокус �при переходах
  • отключается через restoresFocusAfterTransition �= false

13 of 29

UITableView �и UICollectionView

14 of 29

UITableView �и UICollectionView

15 of 29

Button 1

Button 2

Button 3

Button 4

Button 5

Button 1

Button 2

Button 3

Button 4

Button 5

Button 1

Button 2

Button 3

Button 4

Button 5

Button 1

Button 2

Button 3

Button 4

Button 5

Button 1

Button 2

Button 3

Button 4

Button 5

16 of 29

UIFocusGuide

17 of 29

Пульт

18 of 29

Обработка �положения �пальца

19 of 29

Обработка �положения �пальца

20 of 29

Красивости

21 of 29

Фокус �в UIImageView

22 of 29

Минусы

  • Работает только если заданы изображения
  • Нельзя настраивать скейл �в фокусе, �можно лишь подписаться �на изменения размера через focusLayoutGuide

23 of 29

UIFocus�MovementHint

24 of 29

UIFocus�MovementHint

25 of 29

UIInterpolating

MotionEffect

26 of 29

27 of 29

Про SwiftUI

tvOS 15 получше, �но несравнимо �с UIKit

Большая часть

сделана

на UIKit

Первая версия выпущена �до появления SwiftUI

Ограниченный, неудобный API для работы �с фокусом

Отсутствие аналога UICollectionView

Плохая оптимизация �на tvOS

01.

02.

03.

04.

28 of 29

Готовы к челленджам?

Пишите: hrteam@htc-cs.ru �Звоните: +7 (3412) 93-88-61

#НесухиеДоклады

#силацвт

Спасибо�за внимание!

Вопросы?

29 of 29

recommend.htc-cs.ru