Как стать автором
Обновить

Подсветка элементов онбординга. Spotlight onboarding / Highlight element. SwiftUI iOS15+

Время на прочтение8 мин
Количество просмотров9.2K
Всего голосов 54: ↑49 и ↓5+47
Комментарии20

Комментарии 20

Интересный кейс, спасибо автору))

Было очень полезно , впервые вижу такую крутую инфу так понятно

Вот это вы крутой!

есть ли пример исходников? Пишу сейчас аналогичный "bottom sheet", но в UIKit и без подсветки компонентов на экране. Интересно посмотреть, как вы решаете вопрос с нижним отступом safe area на разных устройствах.

Добрый день! Нужно немного больше конкретикии касательно исходников, которые вас интересуют.

В текущем решении для рисовки используется SUI, а не kit и соотвественно показ заднего фона / шторки (или любого другого вашего контекта - например окно диалога), так же строится на модификаторе из SUI (fullScreenCover - см имплементацию clearBackground). И сама шторка из себя так же представляет sui структуру.

Буду рад вам помочь, просто нужны уточнения)

Меня интересует, у вас например на SE и X расстояние между кнопкой и нижним краем экрана разное? Если да, то как вы этого добиваетесь?

Под кнопкой - подразумевается кнопка аналогичная кнопке "Понятно", со скриншота симулятора? Контент шторки представлен как самостоятельная структура, на конкретный девайсы мы не завязываем разные отступы, они всегда соответствуют стандартам в 16 пикеселей.

Или вы не про эту кнопку?

да, я про эту кнопку. У меня получается, что если завязываюсь на отступ от safe area (т.е. например, как вы пишете - 16px независимо от устройства), то при анимации сворачивания-разворачивания шторки эта кнопка остается на месте и "ломает" разметку.

Чтобы она все-таки тоже анимированно перемещалась по экрану, привязываю ее к superview, но тогда приходится высчитывать вручную размер safe area и выставлять отступ кнопки снизу программно. Правда я UIKit использую

я только начинаю углубляться в сферу IT и наткнулась на Вашу статью. очень познавательно, Спасибо!

Как раз раздумывал о таком подходе 2 недели назад.

Спасибо большое!

Полезно и со вкусом🔥

Отличная статья

Очень информативно, спасибо автору за статью! Мемы супер🤓

НЛО прилетело и опубликовало эту надпись здесь

Добрый день! Тк в нашем проекте мы держим IOS15, мы не смогли им воспользоваться :( Если вопрос про то, почему не сделали 2 разные версии (для 17 оси - TipKit и 15,16 осей - решение выше), то это слишком дорого (в плане трудозатрат). Тк поддержка двух версий, включает в себя их постоянные обновления / улучшения. Но соглашусь, TipKit отличная либа для такого рода задач, думаю когда будем приближаться к 17оси - мы на нее перейдем)

Не хватает кода структур OnboardingHighlightElement и OnboardingHighlightElementKey для полноты картины)

Добрый день! Прикреплю ниже:

/// Модель включает необходимые данные. Можете ее так же дополнить нужными параметрами
/// такими как extraHeight, extraWidth если нужны доп. отступы относительно подсветки
public struct OnboardingHighlightElement: Identifiable {
    public let anchor: Anchor<CGRect>
    public let id: String
    public let radius: CGFloat
}

public struct OnboardingHighlightElementKey: PreferenceKey {
    // MARK: - Static Properties

    public static var defaultValue: [String: OnboardingHighlightElement] = [:]

    // MARK: - Static Functions

    public static func reduce(
        value: inout [String: OnboardingHighlightElement],
        nextValue: () -> [String: OnboardingHighlightElement]
    ) {
        value.merge(nextValue()) { $1 }
    }
}

Спасибо! 👍

НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий