-
Découvrez les Outils d’écriture
Les Outils d'écriture permettent de relire, réécrire et transformer du texte directement dans votre app. Découvrez des techniques avancées pour personnaliser les outils d'écriture pour votre app. Explorez les options de mise en forme et leur fonctionnement avec l'édition de texte enrichi. Si vous disposez d'un moteur de texte personnalisé, découvrez comment intégrer en toute transparence l'expérience complète des Outils d'écriture, afin de permettre des modifications directement dans la vue de texte.
Chapitres
- 0:00 - Introduction
- 0:46 - Nouveautés
- 2:21 - Personnaliser les vues de texte natives
- 4:00 - Mise en forme de texte enrichi
- 7:41 - Moteurs de texte personnalisé
- 16:58 - Étapes suivantes
Ressources
Vidéos connexes
WWDC24
-
Rechercher dans cette vidéo…
-
-
11:46 - Attach a coordinator to the view (UIKit)
// Attach a coordinator to the view // UIKit func configureWritingTools() { guard UIWritingToolsCoordinator.isWritingToolsAvailable else { return } let coordinator = UIWritingToolsCoordinator(delegate: self) addInteraction(coordinator) } -
12:02 - Attach a coordinator to the view (AppKit)
// Attach a coordinator to the view // AppKit func configureWritingTools() { guard NSWritingToolsCoordinator.isWritingToolsAvailable else { return } let coordinator = NSWritingToolsCoordinator(delegate: self) coordinator.preferredBehavior = .complete coordinator.preferredResultOptions = [.richText, .list] writingToolsCoordinator = coordinator } -
13:06 - Prepare the context
// Prepare the context func writingToolsCoordinator(_ writingToolsCoordinator: NSWritingToolsCoordinator, requestsContextsFor scope: NSWritingToolsCoordinator.ContextScope, completion: @escaping ([NSWritingToolsCoordinator.Context]) -> Void) { var contexts = [NSWritingToolsCoordinator.Context]() switch scope { case .userSelection: let context = getContextObjectForSelection() contexts.append(context) break // other cases… } // Save references to the contexts for later delegate calls. storeContexts(contexts) completion(contexts) } -
13:48 - Respond to text changes from Writing Tools and update selected range
// Respond to text changes from Writing Tools func writingToolsCoordinator(_ writingToolsCoordinator: NSWritingToolsCoordinator, replace range: NSRange, in context: NSWritingToolsCoordinator.Context, proposedText replacementText: NSAttributedString, reason: NSWritingToolsCoordinator.TextReplacementReason, animationParameters: NSWritingToolsCoordinator.AnimationParameters?, completion: @escaping (NSAttributedString?) -> Void) { } // Update selected range func writingToolsCoordinator(_ writingToolsCoordinator: NSWritingToolsCoordinator, select ranges: [NSValue], in context: NSWritingToolsCoordinator.Context, completion: @escaping () -> Void) { } -
14:41 - Generate preview for animation (AppKit)
// Generate preview for animation (macOS) func writingToolsCoordinator(_ writingToolsCoordinator: NSWritingToolsCoordinator, requestsPreviewFor textAnimation: NSWritingToolsCoordinator.TextAnimation, of range: NSRange, in context: NSWritingToolsCoordinator.Context, completion: @escaping ([NSTextPreview]?) -> Void) { } func writingToolsCoordinator(_ writingToolsCoordinator: NSWritingToolsCoordinator, requestsPreviewFor rect: NSRect, in context: NSWritingToolsCoordinator.Context, completion: @escaping (NSTextPreview?) -> Void) { } -
14:58 - Generate preview for animation (UIKit)
// Generate preview for animation (iOS) func writingToolsCoordinator(_ writingToolsCoordinator: UIWritingToolsCoordinator, requestsPreviewFor textAnimation: UIWritingToolsCoordinator.TextAnimation, of range: NSRange, in context: UIWritingToolsCoordinator.Context, completion: @escaping (UITargetedPreview?) -> Void) { } -
15:08 - Delegate callbacks before and after animation
// Generate preview for animation func writingToolsCoordinator( _ writingToolsCoordinator: NSWritingToolsCoordinator, prepareFor textAnimation: NSWritingToolsCoordinator.TextAnimation, for range: NSRange, in context: NSWritingToolsCoordinator.Context, completion: @escaping () -> Void) { // Hide the specific range of text from the text view } func writingToolsCoordinator( _ writingToolsCoordinator: NSWritingToolsCoordinator, finish textAnimation: NSWritingToolsCoordinator.TextAnimation, for range: NSRange, in context: NSWritingToolsCoordinator.Context, completion: @escaping () -> Void) { // Show the specific range of text again } -
15:39 - Delegate callbacks to show proofreading marks
// Create proofreading marks func writingToolsCoordinator(_ writingToolsCoordinator: NSWritingToolsCoordinator, requestsUnderlinePathsFor range: NSRange, in context: NSWritingToolsCoordinator.Context, completion: @escaping ([NSBezierPath]) -> Void) { } func writingToolsCoordinator(_ writingToolsCoordinator: NSWritingToolsCoordinator, requestsBoundingBezierPathsFor range: NSRange, in context: NSWritingToolsCoordinator.Context, completion: @escaping ([NSBezierPath]) -> Void) { }
-
-
- 0:00 - Introduction
Dans cette vidéo, nous passerons en revue les nouveautés des Outils d’écriture, la façon dont vous pouvez personnaliser l’expérience de votre app, prendre en charge le texte enrichi et intégrer le tout à des moteurs de texte personnalisés.
- 0:46 - Nouveautés
Les Outils d’écriture prennent désormais en charge l’intégration avec ChatGPT, visionOS, les demandes de suivi pour faire des ajustements de ton et l’automatisation à l’aide de Raccourcis. Les Outils d’écriture fournissent également de nouvelles API pour vous aider à les intégrer à votre app.
- 2:21 - Personnaliser les vues de texte natives
Si votre app utilise des vues de texte natives, les Outils d’écriture sont automatiquement pris en charge. Vous pouvez personnaliser davantage l’expérience en adoptant des méthodes de cycle de vie pour réagir à des opérations telles que la pause de la synchronisation, la spécification de plages ignorées dans le texte, l’ajout d’un bouton à la barre d’outils ou la personnalisation de menus contextuels.
- 4:00 - Mise en forme de texte enrichi
Les Outils d’écriture prennent désormais en charge le texte enrichi avec les styles sémantiques. Si votre app prend en charge les intents de présentation telles que les titres, les sous-titres, les citations, les tableaux et les listes, vous pouvez communiquer ces informations aux Outils d’écriture. Les Outils d’écriture fourniront, dans la mesure du possible, des résultats en utilisant des styles dans l’intent de présentation pris en charge par votre app.
- 7:41 - Moteurs de texte personnalisé
Si votre app utilise un moteur de texte personnalisé, vous pouvez désormais activer une expérience entièrement intégrée avec les Outils d’écriture. L’expérience de base des Outils d’écriture fonctionne automatiquement, à condition que vous adoptiez des protocoles d’édition de texte courants. L’expérience complète des Outils d’écriture permet à ces derniers de réécrire le texte directement sur place, de fournir des animations et d’afficher les corrections apportées intralignes. Pour une expérience complète, utilisez la nouvelle API de coordinateur des Outils d’écriture afin de les intégrer à votre moteur de texte personnalisé.
- 16:58 - Étapes suivantes
Découvrez les nouvelles fonctionnalités des Outils d’écriture et profitez de la personnalisation et de la prise en charge du texte enrichi dans votre app. Si vous disposez d’un moteur de texte personnalisé, activez l’expérience complète des Outils d’écriture en adoptant l’API de coordinateur.