<aside> 💡 CoreData에 저장된 Data 기반으로 메인 뷰의 Canvas를 축소해서 보여줌
</aside>
아마 UIKit 뷰를 바로 활용을 못할 거 같기 때문에 스유로 뷰를 만들필요가 있는 것 같다. ㅠㅠ
코어 데이터에서 전달해줄 것은 이미지들이라고 볼 수 있다 (figure에 따른 이미지들..)
그냥 최근 레코드 10개를 주고 스유에서 레벨별로 찾아도 되려나?
아 데이터를 어떻게 넘겨주지 가공해서 넘기냐 받아서 가공하는냐 차이인데
위젯 타임리셋이 앱 종료시로 할 수 있으면 데이터를 바로 받고스유에서 처리하는게 나을듯?
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)
}
}
}
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
}
}
}