Я изучал анимацию в SwiftUI через hackingwithswift.com, и в рамках этого я создал небольшое приложение, в котором, если пользователь выберет правильный ответ (флаг страны), изображение будет вращаться на 360 градусов по оси Y.
После того, как я применил поворот, изображение становится размытым. См. Изображения ниже
Экран запуска
After I click the correct flag
(Compare the flag in below and above image)
After the new game re-loaded
(The placeholder is now showing next image blur as well)
введите описание изображения здесь
Ниже приведен соответствующий код SwiftUI.
Любое предложение, почему изображение становится размытым после поворота?
Я удалил анимацию, и размытия не происходит. Кроме того, размытие остается неизменным, какую бы правильную кнопку я ни нажимал. На изображениях выше я только что показал первый экземпляр. Я временно отключил поле Alert, чтобы посмотреть, не вызывает ли отображение Alert такое странное поведение, но все еще размывается.
struct FlagImage : View{
var image: Image
var body: some View{
image
.renderingMode(.original)
}
}
var body: some View {
ZStack{
LinearGradient(gradient: Gradient(colors: [.blue, .black]), startPoint: .top, endPoint: .bottom).edgesIgnoringSafeArea(.all)
VStack{
Text("Pick the flag for")
Text(countryFlags[correctAnswer])
.font(.largeTitle)
.fontWeight(.black)
VStack{
ForEach(0..<3) { number in
Button(action: {
if number == self.correctAnswer {
withAnimation {
self.rotationAngle += 360
}
}
self.flagClicked(number)
}) {
FlagImage(image: Image(self.countryFlags[number]))
.rotation3DEffect(.degrees((number == self.correctAnswer) ? self.rotationAngle : 0.0), axis: (x:0, y:1, z:0))
}
}
Text("Your score is \(self.userScore)")
}.alert(isPresented: $showingResult) {
Alert.init(title: Text("Result"), message: Text(self.resultMessage), dismissButton: .default(Text("Continue"), action: {
self.correctAnswer = Int.random(in: 0...2)
self.countryFlags.shuffle()
self.rotationAngle = 0.0
}))
}
Spacer()
}
}
}
private func flagClicked(_ number: Int){
if number == self.correctAnswer{
self.userScore += 1
self.resultMessage = "You picked correct flag.\nYour score is \(self.userScore)"
}
else{
self.userScore -= 1
self.resultMessage = "Wrong! Thats the flag for \(self.countryFlags[number]).\nYour score is \(self.userScore)"
}
self.showingResult.toggle()
}