Upgrade to Pro — share decks privately, control downloads, hide ads and more …

タスクアプリ(モチベーション維持)

Avatar for Ken Ishioka Ken Ishioka
October 15, 2022

 タスクアプリ(モチベーション維持)

Avatar for Ken Ishioka

Ken Ishioka

October 15, 2022

More Decks by Ken Ishioka

Other Decks in Business

Transcript

  1. ֤ΧςΰϦʔʹొ࿥͢Δࢀߟͷ಺༰ ۓٸ͔ͭॏཁ •ظݶͷ͋Δ࢓ࣄ΍ձٞ •ΫϨʔϜॲཧ •յΕͨػث΍πʔϧͷमཧ •ࠩ͠ഭͬͨ໰୊ ۓٸ͔ͭॏཁͰͳ͍ •༧๷ •ษڧ͍ͨ͜͠ͱ΍਎ʹ͚͍ͭͨεΩϧ •ద౓ͳӡಈ

    •কདྷͷܭը ۓٸͰ͸ͳ͍͕ɺॏཁ •ॏཁͰͳ͍ϝʔϧɺSNSɺి࿩ •ॏཁͰͳ͍ձٞ •ಥવͷདྷ๚ •ແҙຯͳ઀଴΍෇͖߹͍ ۓٸͰ͸ͳ͍͕ɺॏཁͰͳ͍ •μϥμϥͱͨ͠ి࿩ •଴ͪ࣌ؒʹ͢ΔՋͭͿ͠ •ݱ࣮ಀආ
  2. struct HomeView: View { @Environment(\.managedObjectContext) private var viewContext @Environment(\.dismiss) private

    var dismiss @Environment(\.presentationMode) private var presentationMode @State private var isShowTap: Bool = false // PriorityModelViewͷྻڍܕͷ஋ΛΠϯελϯεม਺ʹॳظԽͯ͋͛͠Δɻ @State private var tapPriority: PriorityEnum = .emergencyHighAndImportantHigh var body: some View { ZStack { VStack { HStack { Text("ୡ੒ͤ͞ΔλεΫΛೖྗ͠Α͏ʂ") .font(.system(size: 20, weight: .bold, design: .default)) .foregroundColor(Color.orange) .padding(.horizontal) .padding(.top) } .frame(width: 450, height: 90) .background(Color.black) Spacer() VStack { Text("ٸ͍Ͱ΍Βͳ͍ͱ͍͚ͳ͍ࣄ\n͍͔ͭୡ੒͍ͤͨ͞ເ΍໨ඪ\n͋ͳͨͷୡ੒͍ͨ͠ࣄΛొ࿥͠·͠ΐ͏ɻ") .font(.callout) .frame(width: 400, height: 150) .padding(35) HStack { Button(action: { // ༏ઌΛܾΊΔϘλϯΛλοϓͨ͠Βɺࢦఆͷ༏ઌॱҐͷจࣈ͕ೖ͍ͬͯྻڍܕͷ஋ʮemergencyHighAndImportantHighʯΛ୅ೖ͢Δɻ tapPriority = .emergencyHighAndImportantHigh isShowTap.toggle() }) { // ۓٸ͔ͭॏཁ // PriorityViewModelͰఆٛͨ֨͠ೲܕม਺ΛΠϯελϯε͠ݺͼग़͢ɻ Text(PriorityEnum.emergencyHighAndImportantHigh.displayString) .frame(width: 140, height: 140) .foregroundColor(Color.white) .background(Color("Task1Color")) .sheet(isPresented: $isShowTap) { RegistrationView(selectedPriority: $tapPriority) } } // ʮۓٸ͔ͭॏཁʯButton͜͜·Ͱ Button(action: { // ༏ઌΛܾΊΔϘλϯΛλοϓͨ͠Βɺࢦఆͷ༏ઌॱҐͷจࣈ͕ೖ͍ͬͯྻڍܕͷ஋ʮ.emergencyHighAndImportantLowʯΛ୅ೖ͢Δɻ tapPriority = .emergencyHighAndImportantLow isShowTap.toggle() }) { // ۓٸ͕ͩॏཁͰͳ͍ // PriorityViewModelͰఆٛͨ֨͠ೲܕม਺ΛΠϯελϯε͠ݺͼग़͢ɻ Text(PriorityEnum.emergencyHighAndImportantLow.displayString) .frame(width: 140, height: 140) .foregroundColor(Color.black) .background(Color("Task4Color")) .sheet(isPresented: $isShowTap) { RegistrationView(selectedPriority: $tapPriority) } } // ʮۓٸ͕ͩॏཁͰͳ͍ʯButton͜͜·Ͱ } // Hstack͜͜·Ͱ HStack { Button(action: { // ༏ઌΛܾΊΔϘλϯΛλοϓͨ͠Βɺࢦఆͷ༏ઌॱҐͷจࣈ͕ೖ͍ͬͯྻڍܕͷ஋ʮ.emergencyLowAndImportantHighʯΛ୅ೖ͢Δɻ tapPriority = .emergencyLowAndImportantHigh isShowTap.toggle() }) { // ۓٸͰͳ͍͕ॏཁ // PriorityViewModelͰఆٛͨ֨͠ೲܕม਺ΛΠϯελϯε͠ݺͼग़͢ɻ Text(PriorityEnum.emergencyLowAndImportantHigh.displayString) .frame(width: 140, height: 140) .foregroundColor(Color.black) .background(Color.green) .sheet(isPresented: $isShowTap) { RegistrationView(selectedPriority: $tapPriority) } } // ʮۓٸͰͳ͍͕ॏཁʯButton͜͜·Ͱ Button(action: { // ༏ઌΛܾΊΔϘλϯΛλοϓͨ͠Βɺࢦఆͷ༏ઌॱҐͷจࣈ͕ೖ͍ͬͯྻڍܕͷ஋ʮ.emergencyLowAndImportantLowʯΛ୅ೖ͢Δɻ tapPriority = .emergencyLowAndImportantLow isShowTap.toggle() }) { //ɹۓٸͰͳ͘ॏཁͰͳ͍ // PriorityViewModelͰఆٛͨ֨͠ೲܕม਺ΛΠϯελϯε͠ݺͼग़͢ɻ Text(PriorityEnum.emergencyLowAndImportantLow.displayString) .frame(width: 140, height: 140) .foregroundColor(Color.black) .background(Color("Task2Color")) .sheet(isPresented: $isShowTap) { RegistrationView(selectedPriority: $tapPriority) } } // ʮۓٸͰͳ͘ॏཁͰͳ͍ʯButton͜͜·Ͱ } // Hstack͜͜·Ͱ Spacer() } // Vstack͜͜·Ͱ Spacer() } // Vstack͜͜·Ͱ .navigationBarTitle("Task") } } ༏ઌ౓Λ؅ཧ͢Δঢ়ଶม਺ ֤༏ઌ౓ͷϘλϯΛ഑ஔͯ͠·͢ɻ λοϓͨ͠Βঢ়ଶม਺tapPriorityʹ༏ઌ౓ͷ஋Λ୅ೖ ӈʹهࡌ͍ͯ͠Δͷ͸HomeViewͷίʔυͰ͢ɻ HomeViewͷίʔυ঺հ
  3. ϙΠϯτ͸MVVMͰ࣮૷ͯ͠·͢ import SwiftUI import CoreData class RegistrationViewModel: ObservableObject { let

    viewContext = PersistenceController.shared.container.viewContext @Published var subject = "" @Published var content = "" @Published var date = Date() @Published var priority = "" func memoInputText(dismiss: DismissAction) { // อଘ͢ΔCoreDataͷMemoܕΠϯελϯεม਺Λ࡞੒ɾॳظԽ͢Δɻ // CoreDataʹ֨ೲ͢ΔλΠϛϯά͸ɺશͯͷCoreDataʹొ࿥͢Δ஋͕ἧͬͨλΠ ϛϯάͰొ࿥Λߦ͏ɻ // ଞͷϑΝΠϧͳͲผʑʹొ࿥ΛߦΘͳ͍͜ͱɻ let inputItem = Memo(context: viewContext) inputItem.subject = subject inputItem.content = content inputItem.date = date inputItem.priority = priority // ʮtry? viewContext.save()ʯͰσʔλΛอଘ͢Δɻ try? viewContext.save() // ը໘Λด͡Δ dismiss() } } ໊݅ɺλεΫ಺༰ɺظ೔ɺ༏ઌ౓ͷ࠶ઃఆΛViewModelͰߦ͍·͢ɻ RegistrationViewͰˏPublishedΛ෇༩ͨ͠ม਺Λݺͼग़͠ɺCoreDataʹొ࿥͠·͢ɻ RegistrationViewModel
  4. ίʔυͷྲྀΕɹͦͷ3 ᶃCoreDataʹొ࿥ͨ͠λεΫΛ༏ઌ౓ຖʹදࣔͤ͞·͢ɻ ᶄSavedViewͷը໘্෦ʹηοτ͍ͯ͠ΔϘλϯΛλοϓ͢Δͱɺ͜͜ͰListදࣔΛ؅ཧ͢Δঢ়ଶม਺priorityCategoryʹ༏ઌ౓ͷ஋Λ୅ೖ͠·͢ɻ ᶅListදࣔΛ୲౰͢ΔTaskListViewʹ஋Λ౉͢ࡍʹɺCoreDataʹొ࿥ͨ͠༏ઌ౓ͷpriorityͱpriorityCategoryΛൺֱͤ͞ɺ දࣔͤ͞Δ༏ઌ౓Λબ୒͢Δɻ struct SavedView: View { @Environment(\.managedObjectContext)

    private var viewContext @Environment(\.dismiss) private var dismiss @StateObject private var saveItems = SavedViewModel() // PriorityModelViewͰఆٛͨ͠ྻڍ஋ΛrawValueΛ࢖༻͠ɺStringܕͰදࣔͰ͖ΔΑ͏ʹࢦࣔ͢Δɻ @State private var prioritys: [String] = [ PriorityEnum.emergencyHighAndImportantHigh.rawValue, PriorityEnum.emergencyHighAndImportantLow.rawValue, PriorityEnum.emergencyLowAndImportantLow.rawValue, PriorityEnum.emergencyLowAndImportantHigh.rawValue ] @State private var priorityCategory = PriorityEnum.emergencyHighAndImportantHigh.rawValue @State private var index: Int = 0 @State private var showEdit: Bool = false var body: some View { Group { VStack { if showEdit == false { VStack { // show͕trueͰ͋Ε͹TextʢTasksʣΛදࣔͤ͞Δɻ HStack { Text("λεΫҰཡ") // จࣈαΠζΛมߋ .font(.system(size: 45, weight: .bold, design: .default)) .foregroundColor(Color.orange) Spacer() } // ScrollView͜͜·Ͱ } // Vstack͜͜·Ͱ .edgesIgnoringSafeArea(.top) .edgesIgnoringSafeArea(.horizontal) .padding(.top) .padding(.horizontal) .background(Color.black) } Spacer() // ฤूը໘͕දࣔ͞ΕΔࡍʹɺ্ͷTextʮTasksʯͱ༏ઌ౓ΛܾΊΔϘλϯͷදࣔΛແ͍ͨ͘͠ɻ TaskListView(items: FetchRequest(sortDescriptors: [NSSortDescriptor(keyPath: \Memo.date, ascending: true)], predicate: NSPredicate(format: "priority == %@", priorityCategory), animation: .default), showEdit: $showEdit) Spacer() } // VStack͜͜·Ͱ } // Groop͜͜·Ͱ } // var body͜͜·Ͱ } // SaveView͜͜·Ͱ SavedView