如何在 Swift 中的 .position 修饰符的视图中存储在模型中的 CGFloat 值?

问题描述 投票:0回答:1

我有一个包含动物名称、图像、位置X和位置Y的动物模型。我尝试在.position修饰符中使用位置X和位置Y变量来将动物图像拖放到位置X和位置Y。主要问题是.position修饰符不识别CGFloat值(位置X和位置Y)

我尝试通过 ForEach 循环调用我的位置 X 和位置 Y,即抛出我的所有动物模型,为我的模型(动物)创建一个变量来访问位置 X 和位置 Y 值。当我尝试打印animal.posx和animal.posy时,打印的值为0.0和0.0。 ` @Query var OwnAnimal : [Kid_animal]

 ForEach(OwnAnimal, id: \.self) { animal in
            
            
              
                    
                    if animal.Animal_drag == true
                    {
                        
                        Image(animal.animal_image).resizable()
                            .scaledToFit()
                            .frame(width: 80, height: 80)
                            .position(x: animal.posx, y: animal.posy)
                        
                    }
                    else {
                        Circle()
                            .fill(Color.white)
                            .opacity(0.4)
                            .frame(width: 100, height: 100)
                        
                            .position(x : animal.posx, y: animal.posy)
                            .onDrop(of: ["public.image"], isTargeted: nil) { providers, location in
                                
                                guard let provider = providers.first else {
                                    return false
                                }
                                
                                if provider.canLoadObject(ofClass: UIImage.self) {
                                    _ = provider.loadObject(ofClass: UIImage.self) { image, error in
                                        if let image = image as? UIImage {
                                            
                                            let droppedImage = Image(uiImage: image)
                                            droppedImages[animal.animal_image] = droppedImage
                                            
                                        }else{
                                            
                                            
                                            
                                            withAnimation(Animation.easeInOut(duration: 0.2)) {
                                                droppedImages[animal.animal_image] = nil
                                            }
                                        }
                                        
                                    }
                                }
                                
                                animal.Animal_drag = true
                                return true
                                
                            }
                            .overlay(
                                
                                droppedImages[animal.animal_image].map {
                                    $0.resizable()
                                        .scaledToFit()
                                        .frame(width: 80, height: 80)
                                        .position(x: animal.posx, y: animal.posy)
                                    
                                }
                                
                                
                            )
                    }
                    
                
            
        }` this my swift view 
import SwiftData
import CoreGraphics
@Model
 class Kid_animal {
    var animal_name : String = ""
    var animal_image : String = ""
    var level : String = ""
    var animal_energy : String = ""
     var posx : CGFloat
     var posy : CGFloat
     var Animal_drag : Bool
     
     init(animal_name: String, animal_image: String, level: String, animal_energy: String,  posx: CGFloat , posy: CGFloat,Animal_drag : Bool) {
         self.animal_name = animal_name
         self.animal_image = animal_image
         self.level = level
         self.animal_energy = animal_energy
         self.posx = posx
         self.posy = posy
         self.Animal_drag = Animal_drag
         
     }
} 

这是我的模型

swift drag-and-drop position cgfloat
1个回答
0
投票

遵循命名约定,对于非可选属性,您需要默认值 0.0,对于 SwiftUI,您需要将类设置为 ObservedObject 并 @Published 所有要观察的属性。

尝试以上方法!

© www.soinside.com 2019 - 2024. All rights reserved.