<aside> 💡 CoreData에 저장된 Data 기반으로 메인 뷰의 Canvas를 축소해서 보여줌

</aside>

아마 UIKit 뷰를 바로 활용을 못할 거 같기 때문에 스유로 뷰를 만들필요가 있는 것 같다. ㅠㅠ

코어 데이터에서 전달해줄 것은 이미지들이라고 볼 수 있다 (figure에 따른 이미지들..)

그냥 최근 레코드 10개를 주고 스유에서 레벨별로 찾아도 되려나?

아 데이터를 어떻게 넘겨주지 가공해서 넘기냐 받아서 가공하는냐 차이인데

위젯 타임리셋이 앱 종료시로 할 수 있으면 데이터를 바로 받고스유에서 처리하는게 나을듯?

Todo

  1. 10개의 이미지 + 색상
  2. 정사각형 뷰에 10개의 도형이 랜덤 위치, 각도로 배치됨
  3. 스몰 뷰는 그냥 위에 두개로 출력시키면 끄읕
  4. 미들이랑 빅은 어떻게 구성할 지 좀 더 생각할 필요.
  5. CoreData에서 데이터 가져오기 (AppDelegate target을 설정해서 싱글톤패턴으로 가져오려했는데 안됨 ㅠㅠ) 스유에서 코어데이터 사용하는 방법 체크필요

Image and Color View

struct ShapeView: View {
    var image: UIImage?
    var color: Color
    
    init(level: Int) {
        self.image = ThemeManager.shared.getThemeInstance().getImageByGaugeLevel(gaugeLevel: level)
        self.color = Color(uiColor: ThemeManager.shared.getThemeInstance().getColorByGaugeLevel(gaugeLevel: level))
    }
    
    var body: some View {
        if let image = image {
            Image(uiImage: image)
                .resizable()
                .renderingMode(.template)
                .frame(width: .infinity, height: .infinity, alignment: .center)
                .foregroundColor(color)
        }
    }
}

Random Location and Resize Image

struct CanvasWidgetEntryView : View {
    var entry: Provider.Entry
    
    var body: some View {
        ZStack{
            Color(uiColor: canvasColor).edgesIgnoringSafeArea(.all)
                .cornerRadius(15)
            GeometryReader { geometry in
//                ForEach(0 ..< getIndex(recordNum: records.count)) { index in
                ForEach(0 ..< 10) { index in
//                    let record = records[index]
//                    ShapeView(level: Int(record.gaugeLevel))
                    ShapeView(level: Int.random(in: 1...100))
                        .offset(x: CGFloat.random(in: geometry.size.width * 0.1...geometry.size.width * 0.9), y: CGFloat.random(in: geometry.size.height*0.1...geometry.size.height*0.9))
                        .frame(width: geometry.size.width / 7, height: geometry.size.height / 7, alignment: .center)
                }
            }
        }
        .padding(10)
        .background(Color(uiColor: bgColor))
    }
    
    var records: [Record] {
        let context = CoreDataStack.shared.managedObjectContext
        let request = Record.fetchRequest()
        var records: [Record] = [Record]()
        
        do {
            records = try context.fetch(request)
        } catch { print("context Error") }
        return records
    }
    
    private func getIndex(recordNum: Int) -> Int {
        if recordNum < 10 {
            return recordNum
        } else {
            return 10
        }
    }
}