스트리밍은 대부분의 브라우저와
Developer 앱에서 사용할 수 있습니다.
-
UIKit의 새로운 기능
탭, 문서 실행 경험, 전환, 텍스트 및 입력 변경 사항 등 UIKit의 모든 기능을 살펴보세요. UIKit 전반의 일반적인 개선 사항뿐만 아니라 UIKit과 SwiftUI 애니메이션 및 제스처 간에 그 어느 때보다 뛰어난 상호 운용성에 대해서도 알아봅니다.
챕터
- 0:00 - Introduction
- 0:55 - Document launch experience
- 1:24 - Updated tab and sidebar
- 2:43 - Fluid transitions
- 3:35 - SwiftUI animations in UIKit
- 4:24 - Coordinated gesture recognizers
- 6:02 - Automatic trait tracking
- 7:44 - List improvements
- 11:18 - UIUpdateLink
- 12:55 - SF Symbol animations
- 14:36 - Sensory feedback
- 16:14 - Text improvements
- 18:14 - Menu actions
- 18:58 - Apple Pencil Pro and PencilKit
리소스
관련 비디오
WWDC24
- Apple Pencil 최대한 활용하기
- iPadOS에서 탭 및 사이드바 경험 향상하기
- SF Symbols 6의 새로운 기능
- SwiftUI의 새로운 기능
- UI 애니메이션 및 전환 효과 향상하기
WWDC23
WWDC21
-
다운로드
안녕하세요, ‘UIKit의 새로운 기능’에 오신 것을 환영합니다 저는 UI Frameworks 팀의 매니저인 Dima입니다
iOS 18에서는 UIKit의 여러 기능이 향상되었습니다 이 동영상에서는 새로운 핵심 기능과 UI 개선 사항 같은 앱 내에서 UIKit 및 SwiftUI 간의 더 많은 통합 여러 일반적인 개선 사항과 추가된 API를 다루겠습니다
UIKit에 도입된 주요 개선 사항은 사용자 인터페이스를 간소화하고 더 원활한 사용을 가능하게 합니다
3가지 핵심 기능을 소개해 드리겠습니다 우선 문서 실행 경험에 대한 개선 사항을 살펴보고 탭 및 사이드바의 주요 업데이트를 다룬 다음 시스템 전반에서의 유연한 새 전환 효과를 설명하겠습니다
먼저, 문서 기반 앱을 위한 개편된 실행 경험이 있습니다 이를 통해 앱만의 고유한 정체성을 과시할 수 있습니다 이제 실행 보기의 디자인을 완전히 제어할 수 있고 템플릿 문서 생성을 위한 최고 수준의 지원이 제공되므로 사용자에게 첫 문서를 만드는 과정을 매끄럽게 안내하는 동시에 우수한 탐색 경험을 유지할 수 있습니다 이에 대해 자세히 알아보려면 ‘문서 실행 경험 향상하기’ 동영상을 확인해 보세요 다음으로 탭 바에 시각적 업데이트가 적용되어 새로운 사이드바 결합 경험과 맞춤화 기능이 도입되었습니다 iPadOS 18에서 탭 바에 새로운 콤팩트한 디자인이 적용되어 빈 세로 및 가로 공간이 줄었고 앱 콘텐츠가 전면에 배치됩니다 기존 사이드바 앱에는 새로운 UITabBarController API를 채택하여 통합된 탭 및 사이드바 경험을 제공할 수 있습니다 사이드바를 최소화하면 애니메이션 효과를 보이며 탭 바로 돌아갑니다 이로 인해 앱의 콘텐츠가 눈에 잘 띄게 표시됩니다
새로운 바 관련 기능 덕분에 탭 바로 빠르게 탐색할 수 있으며 동시에 사이드바를 통해 앱의 깊은 섹션에 접근할 수 있습니다 또한 새 바에는 맞춤화 기능이 포함되었으므로 사용자가 드래그 앤 드롭으로 사이드바와 탭 바를 맞춤화할 수 있죠
새로운 UITab 및 UITabGroup API를 사용하면 앱 구조를 쉽게 설명하여 탭 바와 사이드바를 빌드할 수 있습니다
앱은 또한 Mac Catalyst 및 visionOS에서 네이티브 경험에 적응합니다 자세한 내용은 ‘iPadOS에서 탭 및 사이드바 경험 향상하기’ 동영상에서 확인하세요 전환 효과는 iOS 전반에서 앱의 다양한 부분을 시각적으로 연결하고 탐색하는 데 사용됩니다 iOS 18에는 새로운 확대/축소 전환 효과가 도입되었습니다 이 효과는 탐색과 프레젠테이션 모두에서 작동합니다 또한 이 효과는 단순히 시각적인 요소가 아니라 사용자와 지속적으로 상호작용하므로 효과가 적용된 항목을 탭하여 드래그할 수 있습니다 전환의 시작은 물론 전환 중에서도 가능하죠 앱의 큰 셀에서 전환하는 부분에서 확대/축소 전환을 적용하면 전환 중에 화면에 동일한 UI 요소를 유지할 수 있으므로 앱의 연속성이 개선됩니다 iOS 18은 SwiftUI 및 UIKit의 상호 운용성을 개선하므로 이들을 앱에서 교차하여 사용하는 것이 쉬워집니다
애니메이션 및 제스처 인식의 업데이트에 대해 설명하겠습니다 우선 애니메이션을 위한 흥미로운 업데이트를 다룰게요 이제 SwiftUI Animation 유형으로 UIKit 보기에 애니메이션을 적용할 수 있죠 SwiftUI CustomAnimation을 비롯한 모든 SwiftUI Animation 유형을 사용하여 UIKit 보기에 애니메이션을 도입할 수 있습니다 또한 SwiftUI의 spring 애니메이션으로 더 쉽게 유연한 제스처 기반 애니메이션을 빌드할 수 있습니다
이를 사용하려면 제스처가 변경될 때와 끝날 때 모두 보기에 애니메이션을 적용하세요 이렇게 하면 애니메이션의 대화형 부분과 비대화형 부분 모두에서 연속적인 속도를 원활하게 유지할 수 있습니다 이 업데이트를 보여주는 애니메이션이 적용된 개요를 보려면 Russell의 ‘UI 애니메이션 및 전환 효과 향상하기’ 동영상을 확인하세요 애니메이션은 일반적으로 제스처 인식과 페어링되어 있으므로 더 쉽게 UIKit 및 SwiftUI 간에 제스처를 조정할 수 있습니다 제스처 시스템은 UIKit 및 SwiftUI에서 통합되었으며 이제 일관된 규칙을 준수합니다 iOS 18에서는 두 프레임워크에 걸쳐 제스처 간 종속성을 지정할 수 있죠 UIKit 계층 구조에 중첩된 SwiftUI 계층 구조의 예시입니다 저는 UIKit의 싱글 탭 제스처와 SwiftUI의 더블 탭 제스처가 공존하도록 설정하려 합니다
두 제스처는 동시에 인식되고 있습니다 이를 방지하기 위해 이 두 제스처 인식 사이에 실패 요구 사항을 설정하겠습니다 우선 SwiftUI 제스처를 설정하며 이름을 지정합니다 ‘SwiftUIDoubleTap’으로 지정할게요 그다음 UIKit 대리자에서 다른 제스처 인식의 이름을 확인하여 SwiftUI 제스처와 연관된 제스처를 식별합니다 이렇게 하면 UIKit의 싱글 탭 제스처 인식이 SwiftUI의 더블 탭 제스처가 실패할 때만 실행되어 원하는 효과를 얻을 수 있죠 iOS 18에서는 기존 UIKit 제스처 인식을 SwiftUI 계층 구조에 직접 추가할 수 있습니다 새 UIGestureRecognizerRepresentable 프로토콜을 사용하면 되죠 ‘SwiftUI의 새로운 기능’ 동영상을 시청하여 UIGestureRecognizerRepresentable을 앱에서 채택하는 방법을 자세히 알아보세요 마지막으로 UIKit의 일반적인 개선 사항을 몇 가지 알려드릴게요
UIKit의 특성 시스템은 데이터를 보기 컨트롤러와 앱 계층 구조 내 보기에 전파합니다 iOS 18에서는 쉽게 특성을 사용하고 변경 사항을 처리할 수 있죠 이제 UIKit에서 일반 보기 내 자동 특성 추적과 layoutSubviews, drawRect와 같은 보기 컨트롤러 업데이트 메소드가 지원됩니다 지원되는 이러한 메소드 중 하나를 UIKit에서 호출하면 해당 메소드 내에서 어떤 특성에 접근했는지 기록합니다 그다음 이러한 속성 중 하나의 값이 변경되면 UIKit은 자동으로 해당 메소드와 연관된 무효화를 수행합니다 setNeedsLayout, setNeedsDisplay 등이 있죠 이 예시는 layoutSubviews를 재정의하고 보기의 traitCollection에서 horizontalSizeClass 특성을 읽어 사용할 레이아웃을 파악하는 UIView를 보여줍니다 자동 특성 추적을 실행하기 전에 horizontalSizeClass 특성에 대해 수동으로 등록해야 하며 보기가 변경될 때마다 setNeedsLayout을 호출해야 하죠 iOS 18의 자동 특성 추적을 사용하면 수동 특성 변경 등록을 완전히 삭제해도 됩니다 이는 layoutSubviews가 호출될 때 horizontalSizeClass 특성의 사용이 기록되기 때문이죠
이 보기에 대한 특성이 변경되면 setNeedsLayout을 자동으로 받아 새 값에 따라 업데이트합니다 자동 특성 추적은 필요한 특성 종속성만 만들어 최고의 성능을 제공합니다 이 새 기능은 지원되는 업데이트 메소드 내에서 항상 활성화됩니다
지원되는 메소드의 전체 목록은 문서에서 참고해 주세요 다음으로 컬렉션 및 표 보기 API가 업데이트되어 셀을 더 쉽게 업데이트할 수 있습니다 모든 UICollectionView 목록 섹션 보기와 UITableView에 listEnvironment 특성 세트가 있습니다
listEnvironment는 목록 안에 있는 보기의 스타일을 설명합니다 이 특성으로 목록에서 셀의 스타일을 적절하게 지정하세요 이제 UIListContentConfiguration 및 UIBackgroundConfiguration은 이 새 특성을 이용합니다
새 상태로 업데이트되면 구성 상태의 특성 컬렉션에서 목록 환경과 일치하도록 특성이 조정됩니다
따라서 셀을 구성할 때 목록의 스타일을 알 필요가 없습니다
대신 셀 구성 코드가 표시되는 콘텐츠에 필요한 스타일, 즉 일반 셀, 머리글 또는 바닥글만 알면 됩니다 예를 들어 파일 앱의 둘러보기 탭을 생각해 보세요 구성 레이아웃과 함께 UICollectionView를 사용하여 컨텍스트에 따라 위치, 즐겨찾기 및 태그 목록을 두 가지 스타일로 표시합니다 세로 모드에서 둘러보기 목록은 insetGrouped 스타일을 사용합니다 가로 모드에서는 둘러보기 목록이 Split View의 컨트롤러 사이드바에 표시되며 파일 앱은 UICollectionView의 구성 레이아웃을 구성할 때 사이드바 모양을 사용합니다 이것은 둘러보기 목록의 위치에 대한 콘텐츠 및 배경 구성을 생성하는 파일 앱의 함수입니다 iOS 17에서는 함수가 이 방식으로 구현되었죠
이 함수는 파일 위치 구조와 목록 모양을 인수로 받습니다 먼저 목록 모양이 사이드바 스타일인지 확인하고 그 결과를 isSidebar 로컬 변수에 저장합니다 그런 다음 isSidebar 변수를 기반으로 콘텐츠 및 배경 구성을 수동으로 선택합니다 구성을 수동으로 생성했으므로 둘러보기 목록의 모양이 변경되면 이를 사용하는 셀을 수동으로 다시 구성해야 합니다 그러므로 이 함수는 업데이트된 모양에 대해 다시 실행됩니다
iOS 18에서는 이 함수를 상당히 간소화할 수 있습니다 파일 앱은 contentConfiguration에 cell 생성기를 사용하고 backgroundConfiguration에는 새로운 listCell 생성기를 사용합니다
구성이 셀에 적용되면 셀의 구성 상태에 따라 업데이트됩니다 새로운 목록 환경 특성이 구성 상태의 특성 컬렉션에 있으므로 이제 이러한 구성은 목록의 스타일과 일치하도록 해당 속성을 자동으로 업데이트합니다 UIListContentConfiguration의 경우 이제 기존 cell, subtitleCell 및 valueCell 구성이 목록 환경 특성에 따라 자동으로 스타일을 업데이트합니다
새 header 및 footer 구성도 마찬가지로 작동합니다 UIBackgroundConfiguration의 경우 3개의 새 생성기가 있습니다 listCell, listHeader 및 listFooter입니다
이러한 배경 구성도 목록 환경 특성에 따라 자동으로 스타일을 업데이트합니다
이러한 새 목록 추가 기능을 활용하여 코드를 간소화하세요
UIUpdateLink는 iOS 18에 새로 도입된 기능으로 주기적인 UI 업데이트가 필요한 복잡한 애니메이션을 더 쉽게 구현할 수 있도록 합니다 CADisplayLink를 사용해 보셨다면 UIUpdateLink가 익숙할 것입니다
자동 보기 추적과 같은 기능을 더 많이 제공하므로 보기가 있는 디스플레이에 맞춰 링크가 자동으로 조정되고 그리기 애플리케이션의 경우 시스템을 저지연 모드로 전환하는 기능도 제공합니다 또한 고급 기능을 통해 더 나은 성능과 배터리 효율성을 달성할 수 있습니다 이것은 사인 함수를 통해 위아래로 이동하는 보기의 예시입니다 UIUpdateLink를 만들 때 UIView 인스턴스를 지정합니다 보이는 윈도우에 보기가 추가되면 UIUpdateLink가 자동으로 활성화되고 보기가 제거되면 비활성화됩니다 update 함수에서 updateInfo의 modelTime으로 업데이트 시점을 지정하죠 또한 requiresContinuousUpdates를 true로 설정하여 updateLink가 활성화되어 있는 동안 지속적으로 실행되도록 하죠 false인 경우 updateLink는 제스처나 레이어 변경과 같은 다른 요소가 업데이트를 유발할 때만 실행됩니다 자세한 정보와 고급 사용 사례는 UIUpdateLink 문서 페이지에서 확인하세요 SF Symbols는 툴바 아이콘과 탐색 바, 기타 UI 요소가 일관된 디자인을 갖도록 합니다 UIKit의 SF Symbols에 새 기호 애니메이션이 추가되었습니다 UIImageView, UIBarButtonItem에 3개의 애니메이션 프리셋이 추가되었죠 .wiggle 효과는 기호를 특정 방향 또는 각도로 진동시켜 관심을 끕니다
.breathe 효과는 기호의 크기를 위아래로 부드럽게 조정하여 활동이 진행 중임을 나타내죠 .rotate 효과는 앵커 지점을 중심으로 기호 일부를 회전시키죠 새로운 .periodic 동작을 사용하면 앱에서 반복 횟수와 반복 사이의 맞춤형 지연을 모두 지정할 수 있습니다 다른 새 옵션인 .continuous는 애니메이션이 끝날 때까지 반복 동안 효과를 원활하게 진행하죠 또한 기존 프리셋 중 일부가 새로운 기능으로 향상되었습니다 기존 .replace 효과는 이제 배지와 슬래시에 부드러운 애니메이션을 적용하는 새 Magic Replace 동작을 선호합니다 필요한 경우 이 동작은 자동으로 표준 replace 스타일로 변경됩니다 예로, Magic Replace는 마이크 및 동영상 기호에서 지원되지 않죠 그러므로 DownUp replace 스타일이 자동으로 대체 스타일로 사용되죠 명시적인 대체 스타일을 지정하는 새 API도 있습니다 이 경우에는 .upUp 스타일이죠
업데이트된 SF Symbols 앱과 같은 기호와 관련된 다른 업데이트나, 다양한 색상 지정 시점을 위한 새 주석이나 튀어 오르기 효과를 위한 추가 동작에 대해 자세히 알아보려면 ‘SF Symbols 6의 새로운 기능’을 확인하세요 기호 효과를 적용하는 방법을 다시 알아보려면 ‘앱의 기호에 애니메이션 적용하기’를 확인하세요 감각 피드백은 iPhone 앱을 개선하는 데 효과적입니다 iPadOS 17.5에서는 이 기능이 Apple Pencil Pro 및 Magic Keyboard를 사용하는 iPad로 확장되었습니다 UIFeedbackGenerator는 피드백을 제공하는 새 방법을 지원하며 상호작용으로 보기에 첨부될 수 있습니다 피드백을 제공할 때 앱은 이제 해당 보기 내에서 피드백을 트리거하는 동작이 발생한 위치를 전달해야 합니다 또한 큰 그림이나 아트 보드 보기가 있는 iPad 앱에 적절한 새 UICanvasFeedbackGenerator도 있습니다 이러한 기능이 앱에서 어떻게 작동하는지 보여드리겠습니다 도형을 그리는 앱이 있습니다 도형을 드래그하여 그리드에 스내핑하면 앱이 피드백을 제공하죠 UICanvasFeedbackGenerator를 사용하기에 매우 적합합니다 피드백 생성기가 생성되면 이를 보기와 연결합니다
피드백이 트리거되면 발생한 장소를 전달하죠 이 경우 위치는 드래그한 도형의 정렬을 트리거한 제스처 인식에 있습니다
이제 Apple Pencil Pro로 도형을 드래그하여 스내핑 가이드와 정렬시키면 Apple Pencil에서 햅틱 피드백을 제공합니다
피드백 생성기는 햅틱에서만 사용되는 것이 아닙니다 플랫폼 및 설정에 따라 생성기는 햅틱, 오디오 중 하나만 재생하거나 둘 다 재생하거나 재생하지 않을 수 있죠
예상되는 효과와 관련 없이 앱은 항상 모든 플랫폼에서 동일한 생성기를 사용해야 합니다 iOS 18에서는 텍스트 서식 적용 기능이 확장되었습니다 새로운 텍스트 서식 지정 패널을 활용하여 텍스트 서식 지정 옵션을 제공하는 앱에서 일관되고 맞춤 가능한 환경을 제공하세요 텍스트 속성의 편집을 허용하는 UITextView에는 기본 옵션과 더불어 새 서식 지정 패널을 표시하는 새 메뉴 편집 동작이 있습니다
텍스트 서식 지정 덕분에 서체 및 텍스트 크기의 변경 목록 추가 및 기타 속성의 수정이 명확하고 간편해졌습니다
서식 지정 패널은 새 기능인 텍스트 강조도 지원합니다
이 기능은 두 개의 새 속성을 적용하는 방식으로 작동합니다 textHighlightStyle로 강조할 텍스트의 범위를 지정하고 textHighlightColorScheme로 강조를 렌더링하기 위해 사용될 색상을 지정하죠
기본 색상 외에 미리 정의된 5개의 색상 체계가 있으며 이들은 색조 색상을 사용합니다 서식 지정 패널의 컨트롤과 레이아웃을 맞춤화하세요 맞춤형 UITextFormattingViewController.Configuration을 설정하고 UITextView의 새로운 textFormattingConfiguration 속성을 사용하면 됩니다 새 동작을 끄려면 속성을 nil로 설정하세요 패널의 프레젠테이션을 맞춤화하려면 새 UITextFormattingViewController와 대리자를 사용하세요
쓰기 도구는 고급 텍스트 편집 경험을 제공하는 훌륭한 새 기능입니다
UITextView에는 쓰기 도구 UI가 기본적으로 적용됩니다 편집 가능한 텍스트 보기에서는 인라인 편집 교정과 글 작성 기능이 완전히 지원됩니다 편집할 수 없는 텍스트 보기에서는 오버레이 패널이 표시됩니다 UITextView에는 사용자 인터페이스 경험을 추적 및 수정하기 위한 API가 더 있습니다 여기에는 대리자 알림 및 동작 제어용 속성이 포함됩니다 메뉴 동작은 macOS 메뉴 바와 iPadOS 및 visionOS 키보드 단축키 메뉴에서 앱의 모든 명령을 제공합니다 iOS 18에서는 iPhone 전용 앱의 메뉴 동작이 더 유용해집니다 앱에서 UICommand, UIKeyCommand 및 UIAction을 사용하여 다른 시스템 호출을 지원하세요 UICommand, UIKeyCommand 및 UIAction은 앱을 제어하기 위해 시스템에서 호출할 수 있습니다 예를 들어, 앱이 iPhone의 미러링을 통해 사용되는 경우 UIKeyCommand는 Mac 키보드에서 호출됩니다 주 메뉴 시스템에 명령을 추가하는 방법을 알아보려면 ‘iPad 앱을 한층 더 개선하기’ 동영상을 확인하세요 이제 Apple Pencil Pro와 그리기 경험을 통합하고 더 적은 코드로 풍부한 도구 선택 환경을 제공하기 위해 UIKit 및 PencilKit에 추가된 기능에 대해 살펴보겠습니다 iPadOS 17.5에 새로 도입된 업데이트로 UIKit은 Apple Pencil Pro의 우수한 새 기능을 모두 지원하죠 스퀴즈 제스처로 빠르게 도구를 전환하거나 필요할 때 Apple Pencil이 떠 있는 위치에 선택기를 표시할 수 있죠 피드백 생성기에 대한 업데이트는 Apple Pencil Pro를 개선하여 그리기 및 쓰기 경험을 향상시킵니다 UITouch 및 UIHoverGestureRecognizer는 배럴 롤 각도를 제공하여 앱 그리기 도구의 표현력을 한층 더 개선합니다 또한 실행 취소를 지원하는 모든 앱에서 Apple Pencil Pro를 스퀴즈하면 실행 취소 슬라이더가 표시되어 실행 취소 내역을 빠르게 확인할 수 있습니다 iPadOS 18 및 visionOS 2에 새로 도입된 업데이트로 이제 PKToolPicker에서 사용 가능한 도구를 정의할 수 있습니다 PKCanvasView를 통해 도구 선택기를 사용하거나 그림 캔버스를 사용하거나 둘 다 활용할 수 있습니다 새 API로 맞춤형 그림 캔버스의 도구를 도구 선택기에 빌드할 수 있습니다 Apple Pencil Pro가 전폭적으로 지원되고 있으므로 지금이야말로 PKToolPicker를 도입하기에 가장 좋은 시기입니다 ‘Apple Pencil 최대한 활용하기’ 동영상을 확인하여 새 Apple Pencil API에 대해 알아보세요 와우! 개선 사항이 정말 많습니다 UIKit에 다양한 기능이 추가되어 더욱더 유용한 도구가 되었습니다 다음 단계는 무엇일까요? iOS 18 SDK로 앱을 컴파일하세요 새 UIKit 기능을 도입하세요 전환, 애니메이션, 탭 바 새 문서 실행 경험 등 개선 사항을 활용하세요 그리고 새로운 방식으로 계속 실험하여 앱에 UIKit 및 SwiftUI를 모두 통합하세요 감사합니다!
-
-
0:01 - Using SwiftUI to animate UIViews with gestures
switch gesture.state { case .changed: UIView.animate(.interactiveSpring) { bead.center = gesture.translation } case .ended: UIView.animate(.spring) { bead.center = endOfBracelet } }
-
0:02 - Setting failure requirements between gestures
// Inner SwiftUI double tap gesture Circle() .gesture(doubleTap, name: "SwiftUIDoubleTap") // Outer UIKit single tap gesture func gestureRecognizer( _ gestureRecognizer: UIGestureRecognizer, shouldRequireFailureOf other: UIGestureRecognizer ) -> Bool { other.name == "SwiftUIDoubleTap" }
-
0:03 - Responding to horizontalSizeClass trait
class MyView: UIView { override func layoutSubviews() { super.layoutSubviews() if traitCollection.horizontalSizeClass == .compact { // apply compact layout } else { // apply regular layout } } }
-
0:04 - Using the new automatic content and background configurations
func configurations(for location: FileLocation) -> (UIListContentConfiguration, UIBackgroundConfiguration) { var contentConfiguration = UIListContentConfiguration.cell() let backgroundConfiguration = UIBackgroundConfiguration.listCell() contentConfiguration.text = location.title contentConfiguration.image = location.thumbnailImage return (contentConfiguration, backgroundConfiguration) }
-
0:05 - Using UIUpdateLink
let updateLink = UIUpdateLink( view: view, actionTarget: self, selector: #selector(update) ) updateLink.requiresContinuousUpdates = true updateLink.isEnabled = true @objc func update(updateLink: UIUpdateLink, updateInfo: UIUpdateInfo) { view.center.y = sin(updateInfo.modelTime) * 100 + view.bounds.midY }
-
0:06 - An example of providing UICanvasFeedbackGenerator with additional context
@ViewLoading var feedbackGenerator: UICanvasFeedbackGenerator override func viewDidLoad() { super.viewDidLoad() feedbackGenerator = UICanvasFeedbackGenerator(view: view) } func dragAligned(_ sender: UIPanGestureRecognizer) { feedbackGenerator.alignmentOccurred(at: sender.location(in: view)) }
-
0:07 - Using new attributes for highlight
var attributes = [NSAttributedString.Key: Any]() // Highlight style attributes[.textHighlightStyle] = NSAttributedString.TextHighlightStyle.default // Highlight color scheme attributes[.textHighlightColorScheme] = NSAttributedString.TextHighlightColorScheme.default
-
0:08 - Customizing formatting panel
textView.textFormattingConfiguration = .init(groups: [ .group([ .component(.fontAttributes, .mini), .component(.fontPicker, .regular), .component(.textColor, .mini) ]), .group([ .component(.fontPointSize, .mini), .component(.listStyles, .regular), .component(.highlight, .mini) ]) ])
-
-
찾고 계신 콘텐츠가 있나요? 위에 주제를 입력하고 원하는 내용을 바로 검색해 보세요.
쿼리를 제출하는 중에 오류가 발생했습니다. 인터넷 연결을 확인하고 다시 시도해 주세요.