애니메이션 관리 문제 #117
Replies: 3 comments 7 replies
-
Gus 안녕하세요! 영상이 있으면 이해하는데 더 도움이 될 것 같아요! |
Beta Was this translation helpful? Give feedback.
-
안녕하세요 Gus! 2기 오스틴입니다:) rotationEffect에서 Angle을 적용해주는 부분에서 문제가 있는 것 같습니다. 일단 위에 문제는 rotationEffect에 Angle을 직접 설장하는 것이 아닌 Angle의 degree를 변경시켜주면 정상적으로 동작하는 것 같습니다. // .rotationEffect(item.hasBeenDone ? .degrees(0) : .degrees(rotatingIDs.contains(item.id) ? 10 : -10))
.rotationEffect(.degrees(mission.hasBeenDone ? 0 : animate ? 10 : -10))
import SwiftUI
import SwiftData
@Model
class Mission: Identifiable {
var id: UUID
var hasBeenDone: Bool
var name: String
var password: String
init(name: String, password: String) {
self.id = UUID()
self.hasBeenDone = false
self.name = name
self.password = password
}
}
struct ContentView: View {
@Query private var missions: [Mission]
@Environment(\.modelContext) private var modelContext
@State private var selectedMission: Mission?
private let columns: [GridItem] = Array(repeating: GridItem(.fixed(100)), count: 2)
var body: some View {
NavigationStack {
VStack {
LazyVGrid(columns: columns){
ForEach(missions) { mission in
Button {
mission.hasBeenDone = true
} label: {
GridItemView(mission: mission)
}
}
}
}
.toolbar {
Button {
let newMission = Mission(name: "new Mission", password: "1234")
modelContext.insert(newMission)
} label: {
Image(systemName: "plus")
}
}
}
}
struct GridItemView: View {
@State private var animate = false
var mission: Mission
var body: some View {
Text(mission.name)
.rotationEffect(.degrees(mission.hasBeenDone ? 0 : animate ? 10 : -10))
.animation(
Animation.easeInOut(duration: 0.1)
.repeatForever(autoreverses: true),
value: animate
)
.onAppear {
animate.toggle()
}
}
}
}
#Preview {
ContentView()
.modelContainer(for: Mission.self, inMemory: true)
} |
Beta Was this translation helpful? Give feedback.
-
안녕하세요! Lemon입니다. 불리언 변수 대신에 직접 각도로 변수를 만들면 잘 동작하는 것으로 보입니다. 2025-04-29.12.11.00.movimport SwiftUI
import SwiftData
@Model
class Mission: Identifiable {
var id: UUID
var hasBeenDone: Bool
var name: String
var password: String
init(name: String, password: String) {
self.id = UUID()
self.hasBeenDone = false
self.name = name
self.password = password
}
}
struct ContentView: View {
@Query private var missions: [Mission]
@Environment(\.modelContext) private var modelContext
@State private var selectedMission: Mission?
private let columns: [GridItem] = Array(repeating: GridItem(.fixed(100)), count: 2)
var body: some View {
TabView {
Tab {
NavigationStack {
VStack {
LazyVGrid(columns: columns){
ForEach(missions) { mission in
Button {
mission.hasBeenDone = true
} label: {
GridItemView(mission: mission)
}
}
}
}
.toolbar {
Button {
let newMission = Mission(name: "new Mission", password: "1234")
modelContext.insert(newMission)
} label: {
Image(systemName: "plus")
}
}
}
} label: {
Text("A")
}
Tab {
} label: {
Text("B")
}
}
}
struct GridItemView: View {
@State private var degree: CGFloat = -10
var mission: Mission
var body: some View {
Text(mission.name)
.rotationEffect(.degrees(mission.hasBeenDone ? 0 : degree))
.onAppear {
withAnimation(.easeInOut(duration: 0.1).repeatForever(autoreverses: true)) {
degree = 10
}
}
}
}
}
#Preview {
ContentView()
.modelContainer(for: Mission.self, inMemory: true)
} |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
안녕하세요 Gus 입니다. C2챌린지간 간단한 앱을 만들었는데요
이미지를 좌우로 rowing하는 애니메이션을 만들었는데 swiftData의 Mission 모델의 hasBeenDone이 false -> true
업데이트 되면 이미지가 애니메이션이 멈추고 일직선으로 서있어야하는데,
문제는
https://github.com/user-attachments/assets/d33a15d2-5095-4998-a142-05057b84aa9e
Uploading Simulator Screen Recording - iPhone 16 - 2025-04-27 at 23.38.53.mp4…
해당 문제를 해결 방법을 아시는분 계실까요?
일단 임시방편으로
Beta Was this translation helpful? Give feedback.
All reactions