Estou tentando criar uma visualização circular de conquistas semelhante à vista no Apple Game Center usando SwiftUI. A visualização deve ter texto circular no topo e um texto wrapper de arco centralizado.
Aqui está o que pretendo alcançar:
Texto Circular: Texto organizado de forma circular na parte superior da visualização. Título do Arco: Um título que envolve um arco, centralizado dentro da visualização circular. Tentei usar as visualizações ZStack e Texto com rotação, mas estou tendo problemas para alinhar o texto corretamente em um caminho circular. Além disso, não tenho certeza de como posicionar o título do arco corretamente.
Uma solução SwiftUI para texto curvo pode ser encontrada na resposta para SwiftUI: Como ter espaçamento igual entre letras em uma visualização de texto curvo? (foi minha resposta). Na verdade, parece que você já encontrou esta postagem porque sua própria resposta aqui parece ser baseada no código naquela pergunta (ou nas perguntas de acompanhamento do mesmo OP). Mas você não está usando
CurvedText
em sua resposta.O restante do emblema pode ser construído com um
ZStack
.Para criar o espaço no círculo onde o título é mostrado, use
.trim
para encurtar o caminho e, em seguida,.rotationEffect
mova o espaço para a posição de 12 horas.O tamanho do vão é a única parte um pouco complicada. Se você não gosta de usar uma fração de arco fixa, você pode tentar usar uma aproximação do ângulo com base no tamanho do rótulo, ou você precisa obter o ângulo de arco real do texto.
O ângulo do arco é conhecido dentro da view
CurvedText
, então você pode querer considerar adaptar essa view. Veja Como determinar o ângulo do primeiro caractere em uma view de texto curva no SwiftUI? para um exemplo de onde uma adaptação semelhante está sendo usada.Por fim, o texto curvo pode ser adicionado ao
ZStack
como uma sobreposição. Dessa forma, não afeta o tamanho doZStack
.Para criar uma visualização circular de conquistas semelhante à vista no Apple Game Center, com texto circular na parte superior e um título de wrapper em arco centralizado, você pode usar o SwiftUI para criar uma visualização personalizada.
Crie a Visualização de Texto Circular
Veja a resposta @Benzy Neez: CurvedText
Crie o título do Arc Wrapper
Dependendo do tamanho do texto, será desenhado um arco com o entalhe necessário para exibir o texto.
Use a Visualização de Conquista Circular
Agora você pode usar o AchievementCircularView.