Содержание
Изменение отображения графика в приложении «Акции» на компьютере Mac
Поиск по этому руководству
В приложении «Акции» на компьютере Mac можно просматривать график за различные периоды времени.
Изменение периода просмотра для графика
Можно просматривать историю изменения цены тикера за 1 день (1Д), 1 неделю (1Н), 1 месяц (1М), 3 месяца (3М), 6 месяцев (6М), за год до даты, 1 год (1Г), 2 года (2Г), 5 лет (5Л), 10 лет (10Л) или всю доступную историю.
В приложении «Акции» на Mac нажмите тикер в списке акций.
Нажмите нужный вариант в поле выбора периода времени над графиком.
Выбранный период времени будет выделен в панели.
При выборе периода времени он применяется ко всем акциям. Например, если выбрать период «1М» и нажать другой тикер, его график также будет отображать данные за 1 месяц.
Просмотр данных в графике за определенную дату
В приложении «Акции» на Mac нажмите тикер в списке акций.
Нажмите нужный вариант в поле выбора периода времени над графиком.
Требуется выбрать период времени, содержащий нужную вам дату. Например, если нужно увидеть дату, которая была более месяца назад, выберите как минимум трехмесячный период времени.
Наведите указатель на график.
Если выбран период времени «1Д» или «1Н», то дата, время и цена будут отображаться над графиком. Для других периодов времени отображаются только дата и цена.
Пр перемещении указателя по графику данные будут меняться соответственно.
Просмотр данных в графике за настраиваемый диапазон времени
Выбранный настраиваемый диапазон времени будет выделен более темным цветом, чтобы его было лучше видно на графике.
В приложении «Акции» на Mac нажмите тикер в списке акций.
Нажмите нужный вариант в поле выбора периода времени над графиком.
Требуется выбрать период времени, содержащий нужную вам дату. Например, если нужно увидеть дату, которая была более 30 дней назад, выберите как минимум трехмесячный период времени.
На графике нажмите в начале нужного периода, затем потяните до конца нужного периода.
Можно также нажать в конце нужного периода, а затем потянуть до начала нужного периода.
Настраиваемый диапазон будет отображаться, пока Вы не уберете указатель.
Конец и начало выбранного диапазона, изменение цены, а также изменение в процентах отображаются над графиком.
См. такжеДобавление тикеров и управление ими в приложении «Акции» на Mac
Максимальное количество символов:
250
Не указывайте в комментарии личную информацию.
Максимальное количество символов: 250.
Благодарим вас за отзыв.
Рисунок графика Яблоко, яблоко, любовь, сердце png
Рисунок графика Яблоко, яблоко, любовь, сердце png
теги
- любовь,
- сердце,
- фрукты,
- фрукты Орех,
- графика,
- улыбка,
- красное яблоко,
- красное,
- линия,
- яблоко,
- рисунок,
- скачать,
- искусство,
- область,
- яблоко Клипарт,
- png,
- прозрачный png,
- без фона,
- бесплатная загрузка
Скачать PNG ( 95.37KB )
Размер изображения
- 1280x1225px
Размер файла
- 95.37KB
MIME тип
- Image/png
изменить размер PNG
ширина(px)
высота(px)
Некоммерческое использование, DMCA Contact Us
- org/ImageObject»>
три медовых яблока, яблочный сок, фруктовое семя, спелые красные яблоки, натуральные продукты, еда png
1100x904px
902.78KBтри красные цветочные иллюстрации сердца, День Святого Валентина сердца, Графика красных сердец, любовь, текст png
1471x3619px
4.79MBСердце Бесплатный контент, Сердце, любовь, сердце png
800x744px
40.12KBApple Рисование Компьютерные Иконки, яблоко, любовь, еда png
512x512px
4.27KB org/ImageObject»>Манзана Верде Рисование Яблоко Раскраска Фрукты, яблоко, любовь, белый png
1000x1000px
31.28KBЯблоко учитель, мультфильм яблоко, еда, клубника png
830x895px
369.15KBРисование красного яблока, плод яблока, еда, сердце png
978x1024px
86.6KBсердце в стиле розовый, символ сердца, сердце, любовь, сердце png
589x600px
111.91KBHeart Бесплатный контент, Big Heart s, любовь, сердце png
825x768px
40.73KB org/ImageObject»>красное сердце, рисунок сердца, милое сердце, любовь, текст png
750x751px
83.71KBСердце Любви, Сердца с Любовью Украшение, сердце любви, любовь, текст png
8000x4451px
2.04MBкрасное яблоко, Еда Apple, фрукты, свежие яблоки, натуральные продукты питания, зеленое яблоко png
800x800px
352.22KBдва красных яблока, Сок Яблоко Фрукт Фуд Фуджи, Красное яблоко, натуральные продукты, питание png
1000x1000px
850.72KBСердце, форма сердца, любовь, сердце png
800x694px
18. 49KBLove Heart Компьютерный файл, Любовь фон, красное сердце цветок, любовь, сердце png
1200x1200px
128.88KBкрасный гранат фрукты, сок зеленый чай гранат органические продукты питания, фрукты гранат бесплатно тянуть материал, натуральные продукты, frutti Di Bosco png
2700x1800px
4.54MBРисунок Клубничный фруктовый молочный коктейль, натальный, любовь, белый png
1000x1000px
41.59KBДень святого Валентина, Valentine Hearts Decor, белый фон с красным сердцем, любовь, презентация png
5088x8676px
2.35MBгранатовый фрукт, сок гранатовый фруктовый фуд, гранатовый фрукт, натуральные продукты питания, frutti Di Bosco png
945x945px
861. 42KBДень влюбленных в сердце, красный фон, иллюстрация розового сердца, любовь, праздничные элементы png
1501x1607px
762.6KBКнижка-раскраска Рисунок Яблоко Еда, яблоко, любовь, белый png
600x470px
6.51KBСимвол красного сердца, красное сердце, иллюстрация красного сердца, любовь, клипарт png
8000x7331px
2.5MBсердце, чернила, сердце, любовь, текст png
807x1200px
108.68KBнарезанное яблоко с листиком, яблочный сок Green Purxe9e, яблоко, натуральные продукты питания, еда png
2953x2953px
4.38MB org/ImageObject»>апельсин, помидоры, персики и сливки Computer Icons Emoji, персик, любовь, еда png
1024x1024px
42.73KBрисунок мелом в форме сердца, красный, любовь png
350x350px
56.53KBДень Святого Валентина, плавающие сердца, иллюстрация красных сердец, любовь, сердца png
1300x1265px
845.01KBЛюбовь сердца, красные сердца, иллюстрация красных сердец, сердце, сердца png
3523x6457px
2.1MBСимвол сердца, три сердца, иллюстрация, три красных сердца, любовь, сердце png
2500x3235px
502. 42KBиллюстрация красного сердца, символ любви, романтика, любовь, сердце png
768x768px
17.38KBукрашение любви, любовь, сердечная линия png
1427x1471px
198.8KBПоздравительная открытка Влюбленные карикатуры, любовь, разноцветные сердечки иллюстрации, любовь, акварель Живопись png
1382x2499px
343.63KBсмайлик из красных фруктов, футболка Emoji Peach Sticker Redbubble, абрикос, любовь, натуральные продукты png
1300x1300px
502.65KBиллюстрация красного сердца, значок сердца, 3D красное сердце, любовь, сердце png
1200x1200px
230. 71KBфруктовое зеленое яблоко, яблочный сок хрустящий яблочный сидр яблочный пирог, яблоко, натуральные продукты, еда png
528x574px
333.62KBзеленые фрукты иллюстрация, рисунок авокадо, авокадо, еда, фотография png
512x512px
21.64KBяблоко, фрукты, зеленое яблоко png
2040x2245px
4.54MBбелое облако, Облако Рисование, Облако, белый, лицо png
600x318px
18.45KBбелое облако, воздушный шар мысли, облако мысли, любовь, белый png
600x510px
25.9KBСердце День Святого Валентина, мультфильм Любовь Сердце, любовь, сердце png
640x415px
114. 5KBРабочий стол, СЕРДЦЕ, любовь, 3D Компьютерная графика png
1024x768px
184.45KBИллюстрация выставочного зала, Сцена изящного красного ковра, красно-белая сцена, угол, 3D компьютерная графика png
500x500px
57.8KBРисунок мультфильм любовь сердце, сердце, любовь, сердце png
600x552px
29.82KBдва пересекающихся красных сердца, Сердце, Свадебное Сердце с, любовь, текст png
1504x1245px
7.16MBдва красных сердца, Сердце, Сердца, любовь, текст png
879x656px
171.42KB org/ImageObject»>
иллюстрация красного яблока, сок яблочный фрукт, красное яблоко, натуральные продукты, продукты питания png
515x590px
337.27KB
Клубничное мороженое Мороженое Конусы, клубника, еда, клубника png
716x900px
51KB
Книжка-раскраска Рисунок Яблоко Ребенок, яблоко, любовь, белый png
1000x1000px
28.66KB
Логотип Apple, логотип Apple, сердце, логотип png
512x512px
4.42KB
Сердце День Святого Валентина, сердце, иллюстрация сердца, любовь, атмосфера png
1600x1600px
1005.06KB
Используйте внешний графический процессор с вашим Mac
Ваш Mac с Thunderbolt 3 под управлением macOS High Sierra 10.13.4 или более поздней версии может получить доступ к дополнительной графической производительности, подключившись к внешнему графическому процессору (также известному как eGPU).
eGPU позволяет вам делать все это на вашем Mac:
- Ускорение приложений и игр, которые используют Metal, OpenGL и OpenCL
- Подключение дополнительных внешних мониторов и дисплеев
- Используйте гарнитуры виртуальной реальности, подключенные к eGPU
- Заряжайте MacBook Pro при использовании eGPU
- Используйте eGPU с MacBook Pro, когда его встроенный дисплей закрыт
- Подключите eGPU, когда пользователь вошел в систему
- Подключите несколько eGPU к нескольким портам Thunderbolt 3 (USB-C) на вашем Mac 2
- Используйте пункт строки меню, чтобы безопасно отключить eGPU
- Просмотр уровней активности встроенных и внешних графических процессоров (откройте «Мониторинг активности», затем выберите «Окно» > «История графических процессоров»).
Поддержка eGPU в приложениях и играх
Поддержка eGPU в macOS High Sierra 10.13.4 и более поздних версиях предназначена для ускорения приложений и игр Metal, OpenGL и OpenCL, которые выигрывают от мощного eGPU. Не все приложения и игры поддерживают ускорение eGPU; обратитесь к разработчику приложения, чтобы узнать больше. 3
Как правило, eGPU может повысить производительность в следующих типах приложений:
- Приложения Pro, предназначенные для использования нескольких графических процессоров
- 3D-игры, когда внешний монитор подключен непосредственно к eGPU
- VR, когда гарнитура VR подключена непосредственно к eGPU
- Pro и 3D-игры, которые ускоряют встроенный дисплей iMac, iMac Pro, MacBook Air и MacBook Pro (эта возможность должна быть включена разработчиком приложения).
Приложения
Приложения
Вы можете настроить приложения для использования eGPU одним из следующих способов.
Используйте параметр «Предпочитать внешний графический процессор»
Начиная с macOS Mojave 10. 14, вы можете включить параметр «Предпочитать внешний графический процессор» на панели «Информация» определенного приложения в Finder. Этот параметр позволяет eGPU ускорять работу приложений на любом дисплее, подключенном к Mac, включая дисплеи, встроенные в iMac, iMac Pro, MacBook Air и MacBook Pro:
- Закройте приложение, если оно открыто.
- Выберите приложение в Finder. Большинство приложений находятся в папке «Приложения». Если вы открываете приложение из псевдонима или средства запуска, щелкните значок приложения, удерживая клавишу Control, и выберите «Показать оригинал» во всплывающем меню. Затем выберите исходное приложение.
- Нажмите Command-I, чтобы отобразить информационное окно приложения.
- Установите флажок рядом с параметром Предпочитать внешний графический процессор.
- Откройте приложение, чтобы использовать его с eGPU.
Вы не увидите этот параметр, если eGPU не подключен, если на вашем Mac не установлена macOS Mojave или более поздняя версия, или если приложение самостоятельно управляет выбором графического процессора. Некоторые приложения, такие как Final Cut Pro, напрямую выбирают используемые графические процессоры и игнорируют флажок «Предпочитать внешний графический процессор».
Установить внешний дисплей, подключенный к eGPU, в качестве основного дисплея
Если у вас есть внешний дисплей, подключенный к вашему eGPU, вы можете выбрать его в качестве основного дисплея для всех приложений. Поскольку приложения по умолчанию используют графический процессор, связанный с основным дисплеем, этот параметр работает с различными приложениями.
В macOS Monterey и более поздних версиях:
- Закройте все открытые приложения, которые вы хотите ускорить с помощью eGPU на основном дисплее.
- Выберите меню Apple > «Системные настройки» (или «Системные настройки»), затем нажмите «Мониторы».
- Выберите дисплей, подключенный к eGPU, затем выберите «Использовать как основной дисплей».
- Откройте приложения, которые вы хотите использовать с eGPU.
В macOS Big Sur и более ранних версиях:
- Закройте все открытые приложения, которые вы хотите ускорить с помощью eGPU на основном дисплее.
- Выберите меню Apple > Системные настройки. Нажмите «Дисплеи», затем выберите вкладку «Расстановка».
- Перетащите белую строку меню в поле, представляющее дисплей, подключенный к eGPU.
- Откройте приложения, которые вы хотите использовать с eGPU.
Если вы отключите eGPU, ваш Mac по умолчанию вернется к внутренним графическим процессорам, которые управляют встроенным дисплеем. Когда eGPU повторно подключается, он автоматически устанавливает внешний дисплей в качестве основного дисплея.
О драйверах графического процессора macOS
Аппаратные и программные драйверы графического процессора Mac всегда были глубоко интегрированы в систему. Этот дизайн подпитывает визуально богатые и графические возможности macOS, а также многие более глубокие вычислительные и графические функции платформы. К ним относятся ускорение пользовательского интерфейса, обеспечение поддержки расширенных функций отображения, рендеринг 3D-графики для профессионального программного обеспечения и игр, обработка фотографий и видео, использование мощных вычислительных функций графического процессора и ускорение задач машинного обучения. Эта глубокая интеграция также обеспечивает оптимальное время автономной работы, обеспечивая при этом более высокую производительность и стабильность системы.
Apple разрабатывает, интегрирует и поддерживает драйверы графических процессоров macOS, чтобы обеспечить согласованные возможности графических процессоров во всех продуктах Mac, включая многофункциональные API, такие как Metal, Core Animation, Core Image и Core ML. Чтобы обеспечить наилучшее качество обслуживания клиентов, драйверы графического процессора необходимо разработать, интегрировать, протестировать и предоставить с каждой версией macOS. Драйверы графического процессора вторичного рынка, поставляемые сторонними производителями, несовместимы с macOS.
Драйверы графического процессора, поставляемые с macOS, также предназначены для обеспечения высокого качества и высокой производительности при использовании eGPU, как описано в списке рекомендуемых конфигураций шасси и графических карт eGPU ниже. Из-за такой глубокой системной интеграции в macOS поддерживаются только графические карты, использующие ту же архитектуру графического процессора, что и встроенные в продукты Mac.
Поддерживаемые конфигурации eGPU
Важно использовать eGPU с рекомендованной видеокартой и корпусом Thunderbolt 3. Если вы используете eGPU для зарядки MacBook Pro, корпус eGPU должен обеспечивать достаточную мощность для работы графической карты и зарядки компьютера. Узнайте у производителя корпуса, обеспечивает ли он достаточную мощность для вашего MacBook Pro.
Ниже перечислены рекомендуемые видеокарты, а также шасси, которые могут обеспечить их достаточную мощность.
Универсальные продукты eGPU Thunderbolt 3
Эти продукты содержат мощный встроенный графический процессор и обеспечивают достаточную мощность для зарядки MacBook Pro.
Рекомендуемые универсальные eGPU Thunderbolt 3:
- Blackmagic eGPU и Blackmagic eGPU Pro 4
- Игровая приставка Gigabyte RX 580 4
- Отрывная шайба Sonnet Radeon RX 570 eGFX
- Отрывная шайба Sonnet Radeon RX 560 eGFX 5
AMD Radeon RX 6800, 6800 XT и 6900 XT
Если вы установили macOS Big Sur 11. 4 или более позднюю версию, вы можете использовать эти видеокарты на основе архитектуры AMD Navi RDNA2. Рекомендуемые видеокарты включают AMD Radeon RX 6800, AMD Radeon RX 6800 XT и AMD Radeon RX 6900 XT 7 .
Полная функциональность USB не поддерживается портом USB-C карты. Подключите дисплеи к портам DisplayPort и HDMI на карте. Если вы подключите дисплей к порту USB-C на карте, у вашего дисплея могут возникнуть проблемы при выходе из спящего режима.
Рекомендуемое шасси Thunderbolt 3 для следующих видеокарт:
- Sonnet eGFX Breakaway Box 650 Вт 4
- Razer Core X 4
AMD Radeon RX 6600 XT
Если вы установили macOS Monterey 12.1 или более позднюю версию, поддерживаются дополнительные продукты AMD RDNA2. Рекомендуемые видеокарты включают Sapphire Nitro Radeon RX 6600 XT.
Рекомендуемое шасси Thunderbolt 3 для следующих видеокарт:
- Sonnet eGFX Breakaway Box 550 Вт 4
- Razer Core X 4
AMD Radeon RX 5700, 5700 XT и 5700 XT 50th Anniversary
Если вы установили macOS Catalina 10. 15.1 или более позднюю версию, вы можете использовать эти видеокарты, основанные на архитектуре AMD Navi RDNA. Рекомендуемые видеокарты включают AMD Radeon RX 5700, AMD Radeon RX 5700 XT и AMD Radeon RX 5700 XT 50th Anniversary.
Рекомендуемое шасси Thunderbolt 3 для следующих видеокарт:
- Sonnet eGFX Breakaway Box 650 Вт 4
- Razer Core X 4
AMD Radeon RX Vega 64, Vega Frontier Edition Air и Radeon Pro WX 9100
Эти видеокарты основаны на архитектуре AMD Vega 64. Рекомендуемые видеокарты: Sapphire Vega 64, AMD Frontier Edition с воздушным охлаждением и AMD Radeon Pro WX 9100.
Рекомендуемое шасси Thunderbolt 3 для следующих видеокарт:
AMD Radeon RX Vega 56
Эти видеокарты основаны на архитектуре AMD Vega 56. Рекомендуемые видеокарты включают Sapphire Vega 56.
Рекомендуемое шасси Thunderbolt 3 для следующих видеокарт:
- OWC Mercury Helios FX 4
- Коробка PowerColor Devil
- Отрывная коробка Sonnet eGFX 550 Вт 4
- Отрывная коробка Sonnet eGFX 650 Вт 4
- Razer Core X 4
- Игровая станция PowerColor 4
AMD Radeon RX 470, RX 480, RX 570, RX 580 и Radeon Pro WX 7100
Эти видеокарты основаны на архитектуре AMD Polaris. Рекомендуемые видеокарты включают серию Sapphire Pulse и серию AMD WX.
Рекомендуемое шасси Thunderbolt 3 для следующих видеокарт:
- OWC Mercury Helios FX 4
- Коробка PowerColor Devil
- Сапфировая коробка передач
- Отрывная коробка Sonnet eGFX, 350 Вт
- Отрывная коробка Sonnet eGFX 550 Вт 4
- Отрывная коробка Sonnet eGFX 650 Вт 4
- Razer Core X 4
- Игровая станция PowerColor 4
- Омен ХП 4
- Узел Акитио 6
Подробнее
- Узнайте, как выбрать графический процессор в Final Cut Pro 10.4.7 или более поздней версии.
- Чтобы обеспечить наилучшую производительность eGPU, используйте кабель Thunderbolt 3, который входит в комплект вашего eGPU, или кабель Apple Thunderbolt 3 (USB-C). Также убедитесь, что кабель подключен непосредственно к порту Thunderbolt 3 на вашем Mac, а не через другое устройство или концентратор Thunderbolt.
- Если у вас есть вопросы о шасси или видеокартах Thunderbolt 3, а также о поддержке и совместимости сторонних приложений, обратитесь к поставщику оборудования или программного обеспечения.
- Разработчики программного обеспечения могут узнать больше о программировании своих приложений, чтобы воспользоваться преимуществами поддержки macOS eGPU.
1. Если у вас есть Mac mini (2018 г.) с включенным FileVault, обязательно подключите основной дисплей напрямую к Mac mini во время запуска. После того, как вы войдете в систему и увидите рабочий стол macOS, вы можете отключить дисплей от Mac mini и подключить его к своему eGPU.
2. Если вы используете 13-дюймовый MacBook Pro 2016 или 2017 года, всегда подключайте eGPU и другие высокопроизводительные устройства к левым портам для обеспечения максимальной пропускной способности данных.
3. macOS High Sierra 10.13.4 и более поздние версии не поддерживают eGPU в Windows с помощью Boot Camp или когда ваш Mac находится в режиме восстановления macOS или при установке обновлений системы.
4. Эти корпуса обеспечивают мощность зарядки не менее 85 Вт, что делает их идеальными для использования с 15-дюймовыми моделями MacBook Pro.
5. Воспроизведение контента с защитой HDCP из iTunes и некоторых потоковых сервисов не поддерживается на дисплеях, подключенных к eGPU на базе Radeon 560. Вы можете воспроизводить этот контент на встроенном дисплее MacBook Pro, MacBook Air и iMac.
6. Если вы используете Akitio Node с ноутбуком Mac, вам может потребоваться подключить Mac к адаптеру питания, чтобы обеспечить надлежащую зарядку.
7. Поддерживаются только модели Radeon RX 6900XT, произведенные или проданные AMD (идентификатор устройства 0x73BF).
Информация о продуктах, не производимых Apple, или о независимых веб-сайтах, не контролируемых и не тестируемых Apple, предоставляется без рекомендации или одобрения. Apple не несет ответственности за выбор, работу или использование сторонних веб-сайтов или продуктов. Apple не делает никаких заявлений относительно точности или надежности сторонних веб-сайтов. Свяжитесь с продавцом для получения дополнительной информации.
Дата публикации:
Добавьте богатую графику в свое приложение SwiftUI — WWDC21 — Видео
Скачать
Привет, меня зовут Джейкоб, и добро пожаловать в раздел «Добавьте расширенную графику в свое приложение SwiftUI». Я работаю над приложением для создания градиентов с несколькими моими коллегами. В этом году в нашей команде в моде цвета. Большая часть реализации уже сделана. Теперь мне просто нужно закончить его, добавив немного богатой графики. По мере настройки приложения мы увидим несколько различных областей: работа с безопасной областью, включая ее настройку; поддержка нового стиля переднего плана; богатый новый набор материалов; и рисование с помощью Canvas, нового мощного представления. Итак, приступим. Я покажу вам, что есть в приложении на данный момент. У нас есть библиотека градиентов, и я могу просматривать эти градиенты. Что-то в этом мне очень нравится. Я просто не могу понять это. Я также могу отредактировать градиент… что позволяет мне изменить точки перехода цвета.
И я могу добавить новый градиент.
Я также могу использовать эти градиенты в некоторых визуализаторах… Но шаг за шагом. Мы рассмотрим их чуть позже.
Сейчас давайте сосредоточимся на подробном представлении градиента. Это функционально, но наш фактический контент довольно мал по сравнению с хромом и пустым пространством. Я хочу, чтобы градиент действительно преобладал на этом экране. Итак, давайте начнем редактировать его в Xcode.
Это наш основной детальный вид, и он также используется для нашего режима редактирования. Начнем с isEditing false, а режим редактирования мы рассмотрим позже. Давайте заставим наш градиент использовать как можно больше места, удалив этот кадр.
И теперь, когда градиент занимает всю высоту, нам больше не нужен этот разделитель.
Мы можем пойти еще дальше, поместив наши элементы управления поверх этого градиента, изменив его на ZStack.
Если вы раньше не видели ZStack, то он размещает элементы друг над другом, а не рядом друг с другом. Давайте переместим наши элементы управления редактирования вниз.
И нам нужны отступы только для элементов управления, а не для нашего градиента… так что давайте переместим это.
Вам может быть интересно, почему вверху и внизу градиента остается пустое пространство, даже после того, как мы удалили отступы. По умолчанию SwiftUI размещает ваш контент в безопасной области, избегая всего, что могло бы скрыть или обрезать ваш обзор, например, индикатор «Домой» или любые отображаемые полосы. Безопасная область представлена как область, вставленная из самой дальней полной области, где отображается представление. Контент в безопасной области автоматически размещается в соответствующих вставках, чтобы избежать тех областей, где он был бы закрыт. Безопасная область — это также то, как SwiftUI помогает вам избежать рисования содержимого под клавиатурой. Таким образом, в нашем приложении наши элементы управления автоматически уберутся с клавиатуры. Это работает точно так же, и если мы посмотрим более внимательно, то это потому, что существует несколько разных безопасных областей. Наиболее распространенной является безопасная область контейнера, которая управляется контейнером, в котором отображается представление, и включает в себя такие элементы, как полосы и хром устройства. Кроме того, есть безопасная область клавиатуры, чтобы избежать клавиатуры. И обратите внимание, что безопасная область клавиатуры всегда является областью внутри безопасной области контейнера. Он защищает содержимое от тех же областей, что и безопасная область контейнера, в дополнение к клавиатуре. Можно отказаться от безопасных зон. Обычно вам не нужно этого делать, так как большая часть контента должна находиться в безопасной области, чтобы не обрезаться. Ведь это безопасно. Но игнорирование безопасной области может иметь смысл для фона или другого контента, который вы хотите полностью просмотреть от края до края. Вы можете использовать этот код, чтобы отказаться от всех безопасных областей или указать область клавиатуры, чтобы просто отказаться от безопасной области клавиатуры. Давайте добавим ignoresSafeArea к нашему линейному градиенту, чтобы получить эффект полного обтекания.
Эта кнопка «Редактировать» не очень видна поверх нашего градиента, поэтому давайте проигнорируем только безопасную область на нижнем краю.
Теперь, чтобы убедиться, что мы не столкнемся с той же проблемой, когда этот нижний текст будет неразборчивым из-за градиента, давайте добавим фон позади него.
Через минуту мы настроим фон, но давайте начнем с самого простого по умолчанию, который дает нам белый фон, который автоматически меняется в темном режиме.
И этот фон также выходит за пределы безопасной зоны автоматически. Эта версия фона и его поведение являются новыми в iOS 15 и соответствующих выпусках ОС. Давайте посмотрим, как это работает. Начнем с представления контейнера и его безопасной области. Затем у нас есть представление контента, которое будет находиться в безопасной зоне, чтобы его можно было прочитать. Если бы мы наивно добавили фон с теми же границами в представление, к которому он применяется, мы бы получили это. Но если мы применим модификатор ignoresSafeArea только к фоновому виду, то он будет расширяться за пределы безопасной области, сохраняя при этом основное содержимое красивым и безопасным. Новый модификатор фона дает вам это поведение автоматически. Вернемся к нашему фону и начнем его настраивать. Мы можем передать определенный стиль, который может быть цветом или любым другим стилем, например градиентом.
В этом приложении нет особого смысла, но давайте посмотрим на что-нибудь пастельных тонов.
Я также могу передать форму, чтобы обрезать этот фон… Например, прямоугольник со скругленными углами.
Обратите внимание, что когда я использую пользовательскую фигуру, фон больше не выходит за пределы безопасной области, поэтому фигура соответствует границам вашего содержимого. Что, как мне кажется, лучше подошло бы нашему приложению, так это размытие фона. Для этого мы можем использовать другой новый API: Materials. Материалы — это набор стандартных стилей размытия, которые вы можете применять. И давайте сделаем так, чтобы этот фон снова занимал всю область.
Материалы отлично подходят для мест, где мы хотим показать красочный контент, подобный этому. Вы можете выбирать из множества различных материалов, от ультратонких до сверхтолстых. И все это автоматически показывает правильный дизайн на каждой платформе.
Здесь я буду использовать тонкий материал.
Далее я хочу настроить наш текст. Давайте сделаем количество цветов немного менее заметным, чтобы показать, что название является здесь основной информацией.
Я могу сделать это, установив дополнительный стиль переднего плана.
Возможно, вы заметили, что вторичное содержимое автоматически отображается с эффектом «Яркость», который смешивает цвета позади него. В SwiftUI для этого эффекта нет дополнительного API. Это происходит автоматически, когда вы используете новые стили от вторичного до четвертичного в материальном контексте. Это может произойти, когда вы явно добавляете фон с материалом, как мы только что сделали, или когда ваш контент находится в системном компоненте, таком как боковая панель, которая добавляет материал для вас. И в этих стилях много автоматических смартов. Они автоматически делают правильные вещи и при использовании в неразмытом контексте, где они не используют яркий эффект. Они также автоматически меняют свое поведение, когда вы устанавливаете для них цвет, устанавливая версии цвета для каждого уровня. И та же поддержка работает для установки любого базового стиля переднего плана, даже таких вещей, как градиенты. Пожалуйста, используйте со вкусом. Следует отметить одну вещь: к любому заданному тексту может быть применен один стиль переднего плана, но несколько цветов в пределах его диапазона. Так, например, я мог бы использовать интерполяцию строк для встраивания внутреннего текста…
Затем примените красный цвет foregroundColor… к слову «цвета». И он покажет этот цвет, автоматически отключив яркость для этого диапазона.
Что еще более важно, с этими стилями переднего плана вы впервые получаете правильное поведение со встроенными эмодзи, где они просто работают.
Выглядит хорошо. Давайте снова запустим его и попробуем режим редактирования с этими изменениями.
В основном это уже работает. И эти цвета уходят под размытие, и это здорово. Но если присмотреться, это не совсем то, что нужно. Когда я прокручиваю до конца, часть списка скрыта за размытием. Давайте посмотрим внимательнее на то, что происходит. Давайте уберем хром и посмотрим только на соответствующие виды здесь. Если мы немного раздвинем эти представления по горизонтали, мы увидим, что это происходит потому, что полоса просто ZStacked поверх нашего контента. Теперь, когда мы хотим видеть весь вид сзади, это неправильное поведение. Здесь мы могли бы перейти на VStack, но без списка под размытием мы бы не получили ни одного цвета, просвечивающего при прокрутке вниз. Мы хотим, чтобы фон списка и его прокручиваемая область располагались под панелью, но не под основным содержимым. И именно для этого и предназначена безопасная зона. Если мы сделаем так, чтобы безопасная область была вставлена в эту полосу, то любой важный контент останется незакрытым. Чтобы настроить безопасную область наших собственных представлений, мы можем использовать новый модификатор: safeAreaInset. Это позволяет нам добавлять вспомогательный контент, например, наш бар, поверх основного контента. Я заменю наш ZStack…
С помощью safeAreaInset…
Используя край.дна…
И поместите туда наши элементы управления. Запустим еще раз для проверки.
Этот вид выглядит так же, и это хорошо. Это потому, что он игнорирует безопасную зону.
И в режиме редактирования…
Мы все еще можем прокрутить под панелью, чтобы получить это размытие. Но когда мы прокручиваем вниз, ничего не скрывается. Отлично. Далее, давайте посмотрим на наши визуализаторы.
Начнем с уже написанного визуализатора Shapes.
Он показывает большое количество символов произвольной формы, каждый из которых нарисован одним из градиентов из приложения. Я могу нажать на символ, чтобы увеличить его…
Или нажать в фоновом режиме, чтобы переместить все символы.
И если вы уже видели наши демонстрации анимации SwiftUI, вы знаете, что она всегда интерактивна и ее можно прервать. Так что я могу продолжать переставлять…
И даже нажимать, чтобы выбирать и отменять выбор фигур, пока это происходит.
Если я посмотрю код…
Используется обычная техника рисования графики в SwiftUI. Есть GeometryReader, так что я могу считывать размер представления, чтобы разместить всю эту графику, и ZStack, чтобы помочь мне расположить их.
И в конце тела есть модификатор, который вы, возможно, видели раньше: DrawingGroup. DrawingGroup указывает SwiftUI объединить все содержащиеся в нем виды в один слой для рисования. Это хорошо работает для подобных графических элементов, но не должно использоваться с элементами управления пользовательского интерфейса, такими как текстовые поля и списки. Это отличная техника для использования, когда вы хотите показать большое количество графических элементов, как мы делаем здесь. И одно из преимуществ DrawingGroup заключается в том, что даже несмотря на то, что эти представления отрисовываются по-разному, вы все равно можете использовать ту же функциональность из SwiftUI, которую вы используете везде в своем приложении. Например, здесь у нас есть жест, применяемый к каждому символу для нажатия на них, а также анимация, которая применяется, когда мы изменяем выделение или перемещаем их. Информация о доступности, содержащаяся в этих представлениях, также передается обычным образом — например, эти действия доступности для каждого символа. Однако для поддержки всех этих функций для каждого представления требуется некоторый учет и хранение. Если у вас достаточно большое количество элементов, то даже эти дополнительные накладные расходы могут оказаться слишком большими. И для таких случаев мы представили новый вид Canvas. Наш следующий визуализатор покажет сложную систему частиц, и она еще не написана. Давай построим. Давайте начнем с нашего представления Canvas, чтобы нарисовать его.
Это позволяет нам сделать замыкание, которое запускается каждый раз при рисовании холста и содержит наши команды рисования. Если вы знакомы с drawRect в UIKit или AppKit, это работает примерно так же. Это замыкание дает нам контекст, которому мы отправляем команды рисования, и размер, который мы можем использовать для получения размера всего холста. Давайте начнем с простого рисования изображения. Я могу создать его, используя тот же тип изображения, который я использую в остальной части моего кода SwiftUI.
И давайте зададим контекст для отрисовки нашего изображения.
Когда мы рисуем его в точке 0,0, он находится здесь, с центром в начале координат, где он не очень заметен. Поскольку у нас есть доступный размер всего холста, давайте использовать его, чтобы нарисовать его посередине.
И одну вещь вы можете увидеть, если я изменю наш предварительный просмотр на темный режим…
Это то, что наше изображение автоматически переворачивается, чтобы рисовать белым, поскольку оно использует тот же стиль переднего плана, который мы видели ранее. Так как мы хотим построить систему частиц, давайте нарисуем это изображение еще несколько раз.
Обратите внимание, что это закрытие предназначено для императивного кода. Это не ViewBuilder. Поэтому я могу просто использовать обычный цикл for.
И давайте немного сдвинем каждое изображение, чтобы мы могли их увидеть.
Теперь мы рисуем это изображение несколько раз, но каждый раз контекст должен разрешить его, чтобы оценить его на основе таких вещей, как текущая среда, хотя каждый раз это одно и то же изображение. Мы можем улучшить это, разрешив изображение самостоятельно перед его рисованием.
Теперь у нас более высокая производительность, потому что мы делимся одним и тем же разрешенным изображением, но разрешенное изображение также позволяет нам делать некоторые другие вещи.
Теперь мы можем запросить его размер и базовую линию. В нашем случае мы будем использовать его размер, чтобы сдвинуть каждый на нужную величину.
Теперь давайте добавим эллипсы позади наших блесток. Я собираюсь нарисовать их в том же регионе. Итак, давайте вытащим кадр, чтобы нарисовать их обоих.
Я создам CGRect с теми же значениями X и Y и использую наш imageSize для ширины и высоты…
Затем нарисуйте наше изображение в этом кадре.
Поскольку каждая операция рисования выполняется по порядку, чтобы поместить наш эллипс позади изображения, нам нужно сначала нарисовать его. И мы можем нарисовать его с помощью context.fill…
Который имеет путь и штриховку. Вы можете построить путь со стандартными кривыми Безье, но вот совет: вы также можете использовать фигуры, такие как эллипс, и запрашивать их путь в заданном прямоугольнике.
Другим аргументом является затенение, то есть то, чем можно заполнить наш путь. И это может использовать те же стили, что и остальная часть нашего приложения SwiftUI. Давайте используем голубой цвет.
А вот и эллипсы. Однако на изображениях нет большого контраста. Давайте исправим это. Графический контекст имеет множество стандартных свойств рисования, таких как непрозрачность, режимы наложения, преобразования и многое другое. Давайте установим непрозрачность здесь. И мы можем взглянуть на область, где этот контекст ведет себя немного иначе, чем вы, возможно, привыкли. Если я просто установлю непрозрачность в контексте, то он будет вести себя так, как вы ожидаете. Это влияет на все операции, которые происходят впоследствии.
В прошлом, если я хотел внести изменения в графический контекст, применимый только к некоторым из моих операций рисования, мне приходилось заключать эти операции в квадратные скобки в вызове сохранения и восстановления. Но с контекстом SwiftUI все, что мне нужно сделать, это внести изменения в копию.
И эти изменения влияют только на рисование, выполненное с измененным контекстом. Рисунок, выполненный в исходном контексте, не изменяется.
Давайте также добавим цвет нашему изображению. Еще одна вещь, которую мы можем сделать с разрешенным изображением, — это установить затенение, чтобы управлять отрисовкой символов.
Установим здесь синий цвет.
Выглядит немного менее ярко, чем я надеялся. Иногда, когда вы рисуете, правильный режим наложения может иметь большое значение. Режимы наложения определяют, как сочетаются цвета, особенно с частичной непрозрачностью, как здесь.
Давайте установим режим наложения экрана. Это сочетает цвета так, что они всегда становятся ярче. Это выглядит лучше. Есть много других операций рисования, которые вы можете выполнять. Проверьте тип GraphicsContext, чтобы увидеть все, что возможно. Теперь, чтобы сделать это похоже на симуляцию, он должен двигаться. В SwiftUI есть несколько инструментов, позволяющих со временем что-то изменить. Анимации являются наиболее распространенными, и обычно они происходят автоматически, когда вы вносите изменения. В этом году мы представляем новый инструмент более низкого уровня под названием TimelineView, когда вы хотите точно контролировать, как что-то меняется с течением времени. Я могу использовать TimelineView, просто обернув его вокруг представления, которое я хочу изменить.
И я могу настроить его с помощью расписания, в котором указано, как часто обновлять.
Существуют расписания для таких вещей, как таймеры, но мы собираемся использовать расписание анимации, чтобы получать обновления так быстро, как только сможем их отобразить. Если вы знакомы с отображаемой ссылкой, это работает очень похоже. А если нет, то это совершенно нормально. Мы получаем контекст временной шкалы, который дает нам информацию о том, что мы должны показать.
Я могу указать время в секундах, которое мы будем использовать для анимации наших изображений.
Давайте заставим наши изображения вращаться. Так что я сделаю угол от текущего времени.
Давайте зациклим каждые три секунды, используя остаток…
И умножим это на 120, чтобы получить 360 градусов.
И мы получим значение X с косинусом. Или это был синус? Надеюсь, вы помните свою тригонометрию.
Теперь давайте воспользуемся этим значением, чтобы изменить смещение…
И посмотрим, как это выглядит вживую.
Ницца. Видите, когда они перекрываются, они становятся еще ярче? Это наш рабочий режим наложения экрана. Далее добавим немного интерактивности. Ранее мы рассмотрели некоторые взаимодействия, которые мы можем выполнять, добавляя жесты к отдельным представлениям. Помните, что одним из недостатков использования холста является то, что отдельные элементы внутри него объединяются в один рисунок. Так что мы не могли, например, прикрепить жест к этим отдельным изображениям. Однако мы все еще можем добавить жест ко всему представлению. Давайте добавим возможность увеличить количество отображаемых блесток. Мы добавим некоторое состояние для того, сколько показывать.
Начнем с двух. Давайте используем счетчик для управления нашим циклом.
Затем мы добавим TapGesture для увеличения счетчика.
Давайте обновим наш превью.
Теперь мы можем нажать, чтобы добавить блестки.
Еще один важный аспект использования холста заключается в том, что, поскольку это один рисунок, нет никакой информации о его содержимом, доступной для специальных возможностей. Чтобы сделать это доступным, мы будем использовать стандартные модификаторы доступности для добавления информации о нашем представлении.
А для более сложных случаев есть новый мощный модификатор .accessibilityChildren, который позволяет указать произвольную иерархию представлений SwiftUI для использования для создания информации о доступности представления. Дополнительную информацию о том, как это использовать, см. в разделе «Специальные возможности SwiftUI: помимо основ».
Мы разработали относительно простое использование Canvas, но оно предназначено для поддержки гораздо более сложных применений, так что давайте немного оживим его. Один из моих коллег написал для меня некоторый код моделирования, который работает так же, как здесь, но с гораздо большим количеством элементов, делающих более интересные вещи. У меня есть файл, который он мне прислал, и я просто вставлю его в наше представление.
Этот код имеет ту же структуру, что и то, что мы только что делали. Теперь у нас есть долгоживущий объект модели, который мы со временем обновляем и который отслеживает все наши частицы. У нас есть те же TimelineView и Canvas для анимации и рисования нашего контента. Мы обновляем нашу модель с новой датой, устанавливаем этот режим наложения экрана и говорим каждой активной частице рисовать себя так же, как эллипс, который у нас только что был.