-
Saiba mais sobre as Ferramentas de Escrita
Com as Ferramentas de Escrita, as pessoas podem revisar, reescrever e transformar textos diretamente do seu app. Aprenda técnicas avançadas para personalizar as Ferramentas de Escrita para o seu app. Explore as opções de formatação e como elas funcionam com a edição de texto avançado. Se você tiver um mecanismo de texto personalizado, saiba como integrar perfeitamente toda a experiência das Ferramentas de Escrita, permitindo edições diretamente na visualização do texto.
Capítulos
- 0:00 - Introdução
- 0:46 - Novidades
- 2:21 - Personalizar visualizações de texto nativas
- 4:00 - Formatação de texto avançado
- 7:41 - Mecanismos de texto personalizados
- 16:58 - Próximas etapas
Recursos
Vídeos relacionados
WWDC24
-
Buscar neste vídeo...
-
-
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 - Introdução
Neste vídeo, analisaremos as novidades das Ferramentas de Escrita, como personalizar a experiência do seu app, oferecer suporte a rich text e integrar em mecanismos de texto personalizados.
- 0:46 - Novidades
Agora, as Ferramentas de Escrita oferecem suporte à integração com ChatGPT, visionOS, solicitações de acompanhamento para ajustes de tom e automação usando Atalhos. As Ferramentas de Escrita também fornecem novas APIs para ajudar você a integrar no seu app.
- 2:21 - Personalizar visualizações de texto nativas
Se seu app usa visualizações de texto nativas, você pode ter suporte gratuito às Ferramentas de Escrita. Você pode personalizar mais a experiência, adotando métodos de ciclo de vida para reagir a operações, como pausar a sincronização, especificar intervalos ignorados no texto, fornecer um botão na barra de ferramentas ou personalizar menus de contexto.
- 4:00 - Formatação de texto avançado
As Ferramentas de Escrita agora aceitam rich text com estilos semânticos. Se o seu app aceita intents de apresentação, como títulos, subtítulos, citações, tabelas e listas, você poderá comunicar essas informações às Ferramentas de Escrita. As Ferramentas de Escrita fornecerão resultados usando estilos no intent de apresentação aceito pelo seu app sempre que possível.
- 7:41 - Mecanismos de texto personalizados
Se o seu app usa um mecanismo de texto personalizado, agora é possível ativar uma experiência integrada com as Ferramentas de Escrita. A experiência básica das Ferramentas de Escrita funciona automaticamente, desde que você adote protocolos comuns de edição de texto. A experiência completa das Ferramentas de Escrita permite que elas reescrevam o texto diretamente no local, forneçam animações e mostrem alterações de revisão embutidas. Para ter a experiência completa, use a nova API do coordenador das Ferramentas de Escrita para integrá-las ao seu mecanismo de texto personalizado.
- 16:58 - Próximas etapas
Explore os novos recursos das Ferramentas de Escrita e aproveite a personalização e o suporte a rich text no seu app. Se você tiver um mecanismo de texto personalizado, habilite a experiência completa das Ferramentas de Escrita adotando a API do coordenador.