Atualmente estou trabalhando com o UITextView e agora queria definir a fonte lá. Pelo que posso ver, só posso aplicar UIFont e não a classe Font em si. Encontrei vários guias para converter UIFont em Font, mas nenhum para Font em UIFont. Existe uma maneira de fazer isso ou existe uma classe de UI equivalente no SwiftUI que tem as mesmas funcionalidades do UITextView e usa uma fonte em vez de UIFont? Desde já, obrigado :-)
Strassenrenner's questions
Construí uma view com animação e tudo parecia funcionar bem, mas depois descobri que só funciona na primeira vez e não na segunda. Como sou um novato em programação Swift, não tenho ideia de onde está o problema. Vi diferentes tutoriais de animações e todos funcionaram da mesma maneira que os implementei. Escrevi uma pequena amostra para reproduzir o problema:
import SwiftUI
struct BugSample: View {
var body: some View {
TabView {
ContentView()
.tabItem {
Label("BUG", systemImage: "checkmark")
}
}
}
}
struct Person: Identifiable, Hashable {
var id: UUID
var name: String
init(id: UUID = UUID(), name: String) {
self.id = id
self.name = name
}
}
struct ContentView: View {
@State private var selectedPerson: Person?
var body: some View {
NavigationSplitView {
PersonsListView(selectedPerson: $selectedPerson)
} detail: {
if let selectedPerson {
GalleryView()
} else {
Text("Should not reach here")
}
}
}
}
struct PersonsListView: View {
@Binding var selectedPerson: Person?
var data = [Person(name: "A"), Person(name: "B"), Person(name: "C")]
var body: some View {
List(data, selection: $selectedPerson) { entry in
Text(entry.name)
.onTapGesture {
selectedPerson = entry
}
.listRowSeparator(.hidden)
}
}
}
struct GalleryView: View {
var body: some View {
NavigationStack {
VStack(spacing: 20) {
ProgressView()
CircularView()
}
}
}
}
struct CircularView: View {
@State var scale = 1.0
var body: some View {
Circle()
.frame(width: 200, height: 200)
.scaleEffect(scale)
.onAppear {
let baseAnimation = Animation.easeInOut(duration: 1)
let repeated = baseAnimation.repeatForever(autoreverses: true)
withAnimation(repeated) {
scale = 0.5
}
}
}
}
Ao clicar em uma das 3 entradas, o círculo será animado corretamente e quando eu voltar e abrir a tela novamente, não funcionará. Adicionei também um ProgressView para verificar se funciona e está girando, então talvez o problema esteja no código. Minha primeira sugestão foi o NavigationSplitView porque vi que há um problema de falta de animação, mas é diferente do meu problema ( https://forums.developer.apple.com/forums/thread/728132 ). Alguém tem uma idéia para esse problema, tentei de várias maneiras nas últimas horas, mas não encontrei uma maneira de fazer a animação funcionar novamente.
Estou trabalhando em uma animação dentro do SwiftUI e enfrentei um problema ao usar a Visualização animada dentro de um TabView. Pesquisei muito e encontrei sempre a mesma abordagem para usar uma propriedade de estado com animações. Tudo funciona bem, exceto quando uso a visualização dentro de um TabView. Aqui está um código de exemplo
import SwiftUI
public struct AnimatedView: View {
@State var isRotating: Bool? = false
@State var isAnimating: Bool = true
public var body: some View {
ZStack {
Circle()
.trim(from:0.1, to: 0.2)
.stroke(lineWidth: 5)
.rotation(Angle.degrees(0))
.frame(width: 60, height: 60)
.foregroundColor(.blue)
.rotationEffect(.degrees(isRotating! ? 360 : 0))
.onAppear() {
//if !isAnimating {
// return
//}
//isAnimating = false
withAnimation(Animation.linear(duration: 1).repeatForever(autoreverses: false)) {
self.isRotating!.toggle()
}
}
}
}
}
struct ContentView: View {
enum Tab: Hashable {
case tab1
case tab2
}
@State private var selectedTab: Tab = .tab1
var body: some View {
TabView(selection: $selectedTab) {
Text("Placeholder 11")
.tabItem {
Text("Tab 1")
}
AnimatedView()
.tabItem {
Text("Tab 2")
}
}
}
}
Ao abrir a segunda aba tudo funciona bem, mas quando eu saio e entro novamente, a animação se comporta de forma diferente, pois parece que agora tem dois estados e fica ainda mais selvagem quando eu entro novamente na tela várias vezes. Cheguei à solução de que tenho outro sinalizador que será invertido após a primeira inicialização, para que a animação não seja reinicializada, mas isso me parece um pouco hackeado.
Pelo que entendi corretamente, os métodos onAppear e onDisappear serão chamados quando a View for fechada, mas seu estado será preservado. Portanto, parece que a mesma visão terá vários estados.
Como sou muito novo em animação, gostaria de saber se existe uma prática recomendada para animações, para que elas também funcionem dentro de TabViews (já que este não parece ser um caso especial para mim no momento :-)) Agradecemos antecipadamente