From 7b02aaf800a4720a6fce1b62dff3ab7d1e31c173 Mon Sep 17 00:00:00 2001 From: varvelworld Date: Tue, 18 Nov 2014 01:30:09 +0800 Subject: [PATCH 01/19] Project4 init --- .../Project4/.gitignore" | 70 +++ .../NoteBook.xcodeproj/project.pbxproj" | 503 ++++++++++++++++++ .../contents.xcworkspacedata" | 7 + .../Project4/NoteBook/AppDelegate.h" | 19 + .../Project4/NoteBook/AppDelegate.m" | 45 ++ .../NoteBook/Base.lproj/LaunchScreen.xib" | 41 ++ .../NoteBook/Base.lproj/Main.storyboard" | 307 +++++++++++ .../Project4/NoteBook/DrawBoardView.h" | 32 ++ .../Project4/NoteBook/DrawBoardView.m" | 137 +++++ .../NoteBook/DrawNoteDetailViewController.h" | 18 + .../NoteBook/DrawNoteDetailViewController.m" | 33 ++ .../AppIcon.appiconset/Contents.json" | 38 ++ .../Project4/NoteBook/Info.plist" | 40 ++ .../Project4/NoteBook/MainViewController.h" | 17 + .../Project4/NoteBook/MainViewController.m" | 148 ++++++ .../NoteBook/NewDrawNoteViewController.h" | 16 + .../NoteBook/NewDrawNoteViewController.m" | 51 ++ .../NoteBook/NewNoteViewController.h" | 17 + .../NoteBook/NewNoteViewController.m" | 49 ++ .../Project4/NoteBook/NoteDAO.h" | 25 + .../Project4/NoteBook/NoteDAO.m" | 168 ++++++ .../NoteBook/NoteDetailViewController.h" | 18 + .../NoteBook/NoteDetailViewController.m" | 37 ++ .../Project4/NoteBook/NoteEntity.h" | 25 + .../Project4/NoteBook/NoteEntity.m" | 20 + .../Project4/NoteBook/NoteTableViewCell.h" | 16 + .../Project4/NoteBook/NoteTableViewCell.m" | 23 + .../NoteBook/PicNoteDetailViewController.h" | 17 + .../NoteBook/PicNoteDetailViewController.m" | 29 + .../Project4/NoteBook/SQLiteHelper.h" | 16 + .../Project4/NoteBook/SQLiteHelper.m" | 54 ++ .../Project4/NoteBook/ViewController.h" | 15 + .../Project4/NoteBook/ViewController.m" | 27 + .../Project4/NoteBook/main.m" | 16 + .../Project4/NoteBookTests/Info.plist" | 24 + .../Project4/NoteBookTests/NoteBookTests.m" | 40 ++ 36 files changed, 2158 insertions(+) create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/.gitignore" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook.xcodeproj/project.pbxproj" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook.xcodeproj/project.xcworkspace/contents.xcworkspacedata" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/AppDelegate.h" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/AppDelegate.m" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Base.lproj/LaunchScreen.xib" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Base.lproj/Main.storyboard" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/DrawBoardView.h" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/DrawBoardView.m" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/DrawNoteDetailViewController.h" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/DrawNoteDetailViewController.m" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Images.xcassets/AppIcon.appiconset/Contents.json" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Info.plist" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/MainViewController.h" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/MainViewController.m" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NewDrawNoteViewController.h" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NewDrawNoteViewController.m" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NewNoteViewController.h" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NewNoteViewController.m" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteDAO.h" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteDAO.m" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteDetailViewController.h" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteDetailViewController.m" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteEntity.h" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteEntity.m" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteTableViewCell.h" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteTableViewCell.m" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/PicNoteDetailViewController.h" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/PicNoteDetailViewController.m" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/SQLiteHelper.h" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/SQLiteHelper.m" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/ViewController.h" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/ViewController.m" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/main.m" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBookTests/Info.plist" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBookTests/NoteBookTests.m" diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/.gitignore" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/.gitignore" new file mode 100644 index 00000000..f5b5a9c5 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/.gitignore" @@ -0,0 +1,70 @@ +# Created by https://www.gitignore.io + +### OSX ### +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear on external disk +.Spotlight-V100 +.Trashes + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + + +### Xcode ### +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.xcuserstate + + +### Objective-C ### +# Xcode +# +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.hmap +*.ipa +*.xcuserstate + +# CocoaPods +# +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control +# +# Pods/ + diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook.xcodeproj/project.pbxproj" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook.xcodeproj/project.pbxproj" new file mode 100644 index 00000000..09f6c962 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook.xcodeproj/project.pbxproj" @@ -0,0 +1,503 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + EC0383921A17345B0047C77C /* NoteEntity.m in Sources */ = {isa = PBXBuildFile; fileRef = EC0383911A17345B0047C77C /* NoteEntity.m */; }; + EC0383951A1736BD0047C77C /* NoteDAO.m in Sources */ = {isa = PBXBuildFile; fileRef = EC0383941A1736BD0047C77C /* NoteDAO.m */; }; + EC0383981A17392C0047C77C /* SQLiteHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = EC0383971A17392C0047C77C /* SQLiteHelper.m */; }; + EC03839B1A17689C0047C77C /* NewNoteViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EC03839A1A17689C0047C77C /* NewNoteViewController.m */; }; + EC03839E1A176E2D0047C77C /* MainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EC03839D1A176E2D0047C77C /* MainViewController.m */; }; + EC0383A01A17784C0047C77C /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = EC03839F1A17784C0047C77C /* libsqlite3.dylib */; }; + EC0383A31A1871860047C77C /* NoteDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EC0383A21A1871860047C77C /* NoteDetailViewController.m */; }; + EC0383A61A18795D0047C77C /* NoteTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = EC0383A51A18795D0047C77C /* NoteTableViewCell.m */; }; + EC0383A81A189F7B0047C77C /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC0383A71A189F7B0047C77C /* MobileCoreServices.framework */; }; + EC0383AB1A18C4D30047C77C /* PicNoteDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EC0383AA1A18C4D30047C77C /* PicNoteDetailViewController.m */; }; + EC282FF41A1A564D00F4FE9C /* DrawNoteDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EC282FF31A1A564D00F4FE9C /* DrawNoteDetailViewController.m */; }; + EC457F0C1A19D47700913847 /* NewDrawNoteViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EC457F0B1A19D47700913847 /* NewDrawNoteViewController.m */; }; + EC457F0F1A19D78900913847 /* DrawBoardView.m in Sources */ = {isa = PBXBuildFile; fileRef = EC457F0E1A19D78900913847 /* DrawBoardView.m */; }; + EC4FF8DA1A17240E00049173 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = EC4FF8D91A17240E00049173 /* main.m */; }; + EC4FF8DD1A17240E00049173 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = EC4FF8DC1A17240E00049173 /* AppDelegate.m */; }; + EC4FF8E01A17240E00049173 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EC4FF8DF1A17240E00049173 /* ViewController.m */; }; + EC4FF8E31A17240E00049173 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = EC4FF8E11A17240E00049173 /* Main.storyboard */; }; + EC4FF8E51A17240E00049173 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EC4FF8E41A17240E00049173 /* Images.xcassets */; }; + EC4FF8E81A17240E00049173 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = EC4FF8E61A17240E00049173 /* LaunchScreen.xib */; }; + EC4FF8F41A17240E00049173 /* NoteBookTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EC4FF8F31A17240E00049173 /* NoteBookTests.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + EC4FF8EE1A17240E00049173 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = EC4FF8CC1A17240E00049173 /* Project object */; + proxyType = 1; + remoteGlobalIDString = EC4FF8D31A17240E00049173; + remoteInfo = NoteBook; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + EC0383901A17345B0047C77C /* NoteEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NoteEntity.h; sourceTree = ""; }; + EC0383911A17345B0047C77C /* NoteEntity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NoteEntity.m; sourceTree = ""; }; + EC0383931A1736BD0047C77C /* NoteDAO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NoteDAO.h; sourceTree = ""; }; + EC0383941A1736BD0047C77C /* NoteDAO.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NoteDAO.m; sourceTree = ""; }; + EC0383961A17392C0047C77C /* SQLiteHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SQLiteHelper.h; sourceTree = ""; }; + EC0383971A17392C0047C77C /* SQLiteHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SQLiteHelper.m; sourceTree = ""; }; + EC0383991A17689C0047C77C /* NewNoteViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NewNoteViewController.h; sourceTree = ""; }; + EC03839A1A17689C0047C77C /* NewNoteViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NewNoteViewController.m; sourceTree = ""; }; + EC03839C1A176E2D0047C77C /* MainViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MainViewController.h; sourceTree = ""; }; + EC03839D1A176E2D0047C77C /* MainViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MainViewController.m; sourceTree = ""; }; + EC03839F1A17784C0047C77C /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = usr/lib/libsqlite3.dylib; sourceTree = SDKROOT; }; + EC0383A11A1871860047C77C /* NoteDetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NoteDetailViewController.h; sourceTree = ""; }; + EC0383A21A1871860047C77C /* NoteDetailViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NoteDetailViewController.m; sourceTree = ""; }; + EC0383A41A18795D0047C77C /* NoteTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NoteTableViewCell.h; sourceTree = ""; }; + EC0383A51A18795D0047C77C /* NoteTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NoteTableViewCell.m; sourceTree = ""; }; + EC0383A71A189F7B0047C77C /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; }; + EC0383A91A18C4D30047C77C /* PicNoteDetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PicNoteDetailViewController.h; sourceTree = ""; }; + EC0383AA1A18C4D30047C77C /* PicNoteDetailViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PicNoteDetailViewController.m; sourceTree = ""; }; + EC282FF21A1A564D00F4FE9C /* DrawNoteDetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DrawNoteDetailViewController.h; sourceTree = ""; }; + EC282FF31A1A564D00F4FE9C /* DrawNoteDetailViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DrawNoteDetailViewController.m; sourceTree = ""; }; + EC457F0A1A19D47700913847 /* NewDrawNoteViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NewDrawNoteViewController.h; sourceTree = ""; }; + EC457F0B1A19D47700913847 /* NewDrawNoteViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NewDrawNoteViewController.m; sourceTree = ""; }; + EC457F0D1A19D78900913847 /* DrawBoardView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DrawBoardView.h; sourceTree = ""; }; + EC457F0E1A19D78900913847 /* DrawBoardView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DrawBoardView.m; sourceTree = ""; }; + EC4FF8D41A17240E00049173 /* NoteBook.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = NoteBook.app; sourceTree = BUILT_PRODUCTS_DIR; }; + EC4FF8D81A17240E00049173 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + EC4FF8D91A17240E00049173 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + EC4FF8DB1A17240E00049173 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + EC4FF8DC1A17240E00049173 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + EC4FF8DE1A17240E00049173 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; + EC4FF8DF1A17240E00049173 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; + EC4FF8E21A17240E00049173 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + EC4FF8E41A17240E00049173 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; + EC4FF8E71A17240E00049173 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; + EC4FF8ED1A17240E00049173 /* NoteBookTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NoteBookTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + EC4FF8F21A17240E00049173 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + EC4FF8F31A17240E00049173 /* NoteBookTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NoteBookTests.m; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + EC4FF8D11A17240E00049173 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + EC0383A81A189F7B0047C77C /* MobileCoreServices.framework in Frameworks */, + EC0383A01A17784C0047C77C /* libsqlite3.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EC4FF8EA1A17240E00049173 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + EC4FF8CB1A17240E00049173 = { + isa = PBXGroup; + children = ( + EC0383A71A189F7B0047C77C /* MobileCoreServices.framework */, + EC03839F1A17784C0047C77C /* libsqlite3.dylib */, + EC4FF8D61A17240E00049173 /* NoteBook */, + EC4FF8F01A17240E00049173 /* NoteBookTests */, + EC4FF8D51A17240E00049173 /* Products */, + ); + sourceTree = ""; + }; + EC4FF8D51A17240E00049173 /* Products */ = { + isa = PBXGroup; + children = ( + EC4FF8D41A17240E00049173 /* NoteBook.app */, + EC4FF8ED1A17240E00049173 /* NoteBookTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + EC4FF8D61A17240E00049173 /* NoteBook */ = { + isa = PBXGroup; + children = ( + EC4FF8DB1A17240E00049173 /* AppDelegate.h */, + EC4FF8DC1A17240E00049173 /* AppDelegate.m */, + EC4FF8DE1A17240E00049173 /* ViewController.h */, + EC4FF8DF1A17240E00049173 /* ViewController.m */, + EC4FF8E11A17240E00049173 /* Main.storyboard */, + EC4FF8E41A17240E00049173 /* Images.xcassets */, + EC4FF8E61A17240E00049173 /* LaunchScreen.xib */, + EC4FF8D71A17240E00049173 /* Supporting Files */, + EC0383901A17345B0047C77C /* NoteEntity.h */, + EC0383911A17345B0047C77C /* NoteEntity.m */, + EC0383931A1736BD0047C77C /* NoteDAO.h */, + EC0383941A1736BD0047C77C /* NoteDAO.m */, + EC0383961A17392C0047C77C /* SQLiteHelper.h */, + EC0383971A17392C0047C77C /* SQLiteHelper.m */, + EC0383991A17689C0047C77C /* NewNoteViewController.h */, + EC03839A1A17689C0047C77C /* NewNoteViewController.m */, + EC03839C1A176E2D0047C77C /* MainViewController.h */, + EC03839D1A176E2D0047C77C /* MainViewController.m */, + EC0383A11A1871860047C77C /* NoteDetailViewController.h */, + EC0383A21A1871860047C77C /* NoteDetailViewController.m */, + EC0383A41A18795D0047C77C /* NoteTableViewCell.h */, + EC0383A51A18795D0047C77C /* NoteTableViewCell.m */, + EC0383A91A18C4D30047C77C /* PicNoteDetailViewController.h */, + EC0383AA1A18C4D30047C77C /* PicNoteDetailViewController.m */, + EC457F0A1A19D47700913847 /* NewDrawNoteViewController.h */, + EC457F0B1A19D47700913847 /* NewDrawNoteViewController.m */, + EC457F0D1A19D78900913847 /* DrawBoardView.h */, + EC457F0E1A19D78900913847 /* DrawBoardView.m */, + EC282FF21A1A564D00F4FE9C /* DrawNoteDetailViewController.h */, + EC282FF31A1A564D00F4FE9C /* DrawNoteDetailViewController.m */, + ); + path = NoteBook; + sourceTree = ""; + }; + EC4FF8D71A17240E00049173 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + EC4FF8D81A17240E00049173 /* Info.plist */, + EC4FF8D91A17240E00049173 /* main.m */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + EC4FF8F01A17240E00049173 /* NoteBookTests */ = { + isa = PBXGroup; + children = ( + EC4FF8F31A17240E00049173 /* NoteBookTests.m */, + EC4FF8F11A17240E00049173 /* Supporting Files */, + ); + path = NoteBookTests; + sourceTree = ""; + }; + EC4FF8F11A17240E00049173 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + EC4FF8F21A17240E00049173 /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + EC4FF8D31A17240E00049173 /* NoteBook */ = { + isa = PBXNativeTarget; + buildConfigurationList = EC4FF8F71A17240E00049173 /* Build configuration list for PBXNativeTarget "NoteBook" */; + buildPhases = ( + EC4FF8D01A17240E00049173 /* Sources */, + EC4FF8D11A17240E00049173 /* Frameworks */, + EC4FF8D21A17240E00049173 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = NoteBook; + productName = NoteBook; + productReference = EC4FF8D41A17240E00049173 /* NoteBook.app */; + productType = "com.apple.product-type.application"; + }; + EC4FF8EC1A17240E00049173 /* NoteBookTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = EC4FF8FA1A17240E00049173 /* Build configuration list for PBXNativeTarget "NoteBookTests" */; + buildPhases = ( + EC4FF8E91A17240E00049173 /* Sources */, + EC4FF8EA1A17240E00049173 /* Frameworks */, + EC4FF8EB1A17240E00049173 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + EC4FF8EF1A17240E00049173 /* PBXTargetDependency */, + ); + name = NoteBookTests; + productName = NoteBookTests; + productReference = EC4FF8ED1A17240E00049173 /* NoteBookTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + EC4FF8CC1A17240E00049173 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0610; + ORGANIZATIONNAME = lzh; + TargetAttributes = { + EC4FF8D31A17240E00049173 = { + CreatedOnToolsVersion = 6.1; + }; + EC4FF8EC1A17240E00049173 = { + CreatedOnToolsVersion = 6.1; + TestTargetID = EC4FF8D31A17240E00049173; + }; + }; + }; + buildConfigurationList = EC4FF8CF1A17240E00049173 /* Build configuration list for PBXProject "NoteBook" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = EC4FF8CB1A17240E00049173; + productRefGroup = EC4FF8D51A17240E00049173 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + EC4FF8D31A17240E00049173 /* NoteBook */, + EC4FF8EC1A17240E00049173 /* NoteBookTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + EC4FF8D21A17240E00049173 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EC4FF8E31A17240E00049173 /* Main.storyboard in Resources */, + EC4FF8E81A17240E00049173 /* LaunchScreen.xib in Resources */, + EC4FF8E51A17240E00049173 /* Images.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EC4FF8EB1A17240E00049173 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + EC4FF8D01A17240E00049173 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EC0383951A1736BD0047C77C /* NoteDAO.m in Sources */, + EC282FF41A1A564D00F4FE9C /* DrawNoteDetailViewController.m in Sources */, + EC0383981A17392C0047C77C /* SQLiteHelper.m in Sources */, + EC4FF8E01A17240E00049173 /* ViewController.m in Sources */, + EC03839E1A176E2D0047C77C /* MainViewController.m in Sources */, + EC03839B1A17689C0047C77C /* NewNoteViewController.m in Sources */, + EC457F0F1A19D78900913847 /* DrawBoardView.m in Sources */, + EC457F0C1A19D47700913847 /* NewDrawNoteViewController.m in Sources */, + EC0383A31A1871860047C77C /* NoteDetailViewController.m in Sources */, + EC4FF8DD1A17240E00049173 /* AppDelegate.m in Sources */, + EC0383921A17345B0047C77C /* NoteEntity.m in Sources */, + EC4FF8DA1A17240E00049173 /* main.m in Sources */, + EC0383AB1A18C4D30047C77C /* PicNoteDetailViewController.m in Sources */, + EC0383A61A18795D0047C77C /* NoteTableViewCell.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EC4FF8E91A17240E00049173 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EC4FF8F41A17240E00049173 /* NoteBookTests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + EC4FF8EF1A17240E00049173 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = EC4FF8D31A17240E00049173 /* NoteBook */; + targetProxy = EC4FF8EE1A17240E00049173 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + EC4FF8E11A17240E00049173 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + EC4FF8E21A17240E00049173 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + EC4FF8E61A17240E00049173 /* LaunchScreen.xib */ = { + isa = PBXVariantGroup; + children = ( + EC4FF8E71A17240E00049173 /* Base */, + ); + name = LaunchScreen.xib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + EC4FF8F51A17240E00049173 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.1; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + EC4FF8F61A17240E00049173 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.1; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + EC4FF8F81A17240E00049173 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_FILE = NoteBook/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + EC4FF8F91A17240E00049173 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_FILE = NoteBook/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; + EC4FF8FB1A17240E00049173 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = NoteBookTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/NoteBook.app/NoteBook"; + }; + name = Debug; + }; + EC4FF8FC1A17240E00049173 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + INFOPLIST_FILE = NoteBookTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/NoteBook.app/NoteBook"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + EC4FF8CF1A17240E00049173 /* Build configuration list for PBXProject "NoteBook" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EC4FF8F51A17240E00049173 /* Debug */, + EC4FF8F61A17240E00049173 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + EC4FF8F71A17240E00049173 /* Build configuration list for PBXNativeTarget "NoteBook" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EC4FF8F81A17240E00049173 /* Debug */, + EC4FF8F91A17240E00049173 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + EC4FF8FA1A17240E00049173 /* Build configuration list for PBXNativeTarget "NoteBookTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EC4FF8FB1A17240E00049173 /* Debug */, + EC4FF8FC1A17240E00049173 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = EC4FF8CC1A17240E00049173 /* Project object */; +} diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook.xcodeproj/project.xcworkspace/contents.xcworkspacedata" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook.xcodeproj/project.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 00000000..a6cf8f90 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook.xcodeproj/project.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/AppDelegate.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/AppDelegate.h" new file mode 100644 index 00000000..5711c762 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/AppDelegate.h" @@ -0,0 +1,19 @@ +// +// AppDelegate.h +// NoteBook +// +// Created by 陆钟豪 on 14/11/15. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import + +@interface AppDelegate : UIResponder + +@property (strong, nonatomic) UIWindow *window; + + + + +@end + diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/AppDelegate.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/AppDelegate.m" new file mode 100644 index 00000000..6957a65e --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/AppDelegate.m" @@ -0,0 +1,45 @@ +// +// AppDelegate.m +// NoteBook +// +// Created by 陆钟豪 on 14/11/15. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import "AppDelegate.h" + +@interface AppDelegate () + +@end + +@implementation AppDelegate + + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + // Override point for customization after application launch. + return YES; +} + +- (void)applicationWillResignActive:(UIApplication *)application { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. +} + +- (void)applicationDidEnterBackground:(UIApplication *)application { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. +} + +- (void)applicationWillEnterForeground:(UIApplication *)application { + // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. +} + +- (void)applicationDidBecomeActive:(UIApplication *)application { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. +} + +- (void)applicationWillTerminate:(UIApplication *)application { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. +} + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Base.lproj/LaunchScreen.xib" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Base.lproj/LaunchScreen.xib" new file mode 100644 index 00000000..f0431d72 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Base.lproj/LaunchScreen.xib" @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Base.lproj/Main.storyboard" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Base.lproj/Main.storyboard" new file mode 100644 index 00000000..f5430745 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Base.lproj/Main.storyboard" @@ -0,0 +1,307 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/DrawBoardView.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/DrawBoardView.h" new file mode 100644 index 00000000..6d46c6c6 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/DrawBoardView.h" @@ -0,0 +1,32 @@ +// +// DrawBoardView.h +// NoteBook +// +// Created by 陆钟豪 on 14/11/17. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import + +@interface DrawBoardView : UIView + +@property (strong, nonatomic) UIColor *drawColor; + +-(BOOL)writeToFile:(NSString*) filePath; +-(void)readFromFile:(NSString*) filePath; + +@end + +@interface DrawPoint : NSObject +@property (nonatomic) CGPoint point; +-(instancetype) initWithCGPoint:(CGPoint)point; +@end + + +@interface DrawStroke : NSObject +@property (nonatomic)CGMutablePathRef pathRef; +@property (strong, nonatomic)NSMutableArray* drawPoints; +-(instancetype)initWithStartCGPoint:(CGPoint)point; +-(void)addCGPoint:(CGPoint)point; +-(void)drawContext:(CGContextRef)context; +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/DrawBoardView.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/DrawBoardView.m" new file mode 100644 index 00000000..e21f2d8d --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/DrawBoardView.m" @@ -0,0 +1,137 @@ +// +// DrawBoardView.m +// NoteBook +// +// Created by 陆钟豪 on 14/11/17. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import "DrawBoardView.h" +#import + +@implementation DrawBoardView +{ + NSMutableArray* _drawStrokes; +} + +-(BOOL)writeToFile:(NSString*)filePath { + NSLog(@"archiveRootObject return %d", [NSKeyedArchiver archiveRootObject:_drawStrokes toFile:filePath]); + return [[NSFileManager defaultManager] fileExistsAtPath:filePath]; +} + +-(void)readFromFile:(NSString*) filePath { + _drawStrokes = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; + [self setNeedsDisplay]; +} + +-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { + if(_drawStrokes == nil) { + _drawStrokes = [NSMutableArray new]; + } + UITouch *touch = [touches anyObject]; + CGPoint touchPoint = [touch locationInView:self]; + DrawStroke* stroke = [[DrawStroke alloc] initWithStartCGPoint:touchPoint]; + [_drawStrokes addObject:stroke]; + [self setNeedsDisplay]; +} + +-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { + DrawStroke* stroke = [_drawStrokes lastObject]; + UITouch *touch = [touches anyObject]; + CGPoint touchPoint = [touch locationInView:self]; + [stroke addCGPoint:touchPoint]; + [self setNeedsDisplay]; +} + +-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { + DrawStroke* stroke = [_drawStrokes lastObject]; + UITouch *touch = [touches anyObject]; + CGPoint touchPoint = [touch locationInView:self]; + [stroke addCGPoint:touchPoint]; + [self setNeedsDisplay]; +} + + +- (void)drawRect:(CGRect)rect { + CGContextRef context = UIGraphicsGetCurrentContext(); + CGContextSetLineWidth(context, 2.0); + CGContextSetLineCap(context, kCGLineCapRound); + CGContextSetStrokeColorWithColor(context, self.drawColor.CGColor); + for(DrawStroke *stroke in _drawStrokes) { + [stroke drawContext:context]; + } + CGContextStrokePath(context); +} + + +@end + +@implementation DrawPoint + +-(instancetype) initWithCGPoint:(CGPoint)point { + self = [super init]; + self.point = point; + return self; +} + +-(id)initWithCoder:(NSCoder *)aDecoder { + self = [super init]; + CGFloat x = (CGFloat)[aDecoder decodeDoubleForKey:@"x"]; + CGFloat y = (CGFloat)[aDecoder decodeDoubleForKey:@"y"]; + self.point = CGPointMake(x, y); + return self; +} + +-(void)encodeWithCoder:(NSCoder *)aCoder { + [aCoder encodeDouble:(double)self.point.x forKey:@"x"]; + [aCoder encodeDouble:(double)self.point.y forKey:@"y"]; +} + +@end + + +@implementation DrawStroke + +-(instancetype)initWithStartCGPoint:(CGPoint)point { + self = [super init]; + self.pathRef = CGPathCreateMutable(); + CGPathMoveToPoint(self.pathRef, NULL, point.x, point.y); + self.drawPoints = [NSMutableArray new]; + [self.drawPoints addObject:[[DrawPoint alloc] initWithCGPoint:point]]; + return self; +} +-(id)initWithCoder:(NSCoder *)aDecoder { + self = [super init]; + self.pathRef = CGPathCreateMutable(); + self.drawPoints = [aDecoder decodeObjectForKey:@"drawPoints"]; + DrawPoint *startDrawPoint = [self.drawPoints objectAtIndex:0]; + CGPoint startPoint = CGPointMake(startDrawPoint.point.x, startDrawPoint.point.y); + CGPathMoveToPoint(self.pathRef, NULL, startPoint.x, startPoint.y); + for(NSInteger i = 1; i < [self.drawPoints count]; ++i) { + DrawPoint *drawPoint = [self.drawPoints objectAtIndex:i]; + CGPoint point = CGPointMake(drawPoint.point.x, drawPoint.point.y); + CGPathAddLineToPoint(self.pathRef, NULL, point.x, point.y); + } + return self; +} + +-(void)encodeWithCoder:(NSCoder *)aCoder { + [aCoder encodeObject:self.drawPoints forKey:@"drawPoints"]; +} + +-(void)addCGPoint:(CGPoint)point { + CGPathAddLineToPoint(self.pathRef, NULL, point.x, point.y); + [self.drawPoints addObject:[[DrawPoint alloc] initWithCGPoint:point]]; +} + +-(void)drawContext:(CGContextRef)context { + CGContextAddPath(context, self.pathRef); +} + +-(void)dealloc{ + CGPathRelease(self.pathRef); +} + +@end + + diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/DrawNoteDetailViewController.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/DrawNoteDetailViewController.h" new file mode 100644 index 00000000..fb6b950f --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/DrawNoteDetailViewController.h" @@ -0,0 +1,18 @@ +// +// DrawNoteDetailViewController.h +// NoteBook +// +// Created by 陆钟豪 on 14/11/18. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import +#import "DrawBoardView.h" +#import "NoteEntity.h" + +@interface DrawNoteDetailViewController : UIViewController + +@property (weak, nonatomic) IBOutlet DrawBoardView *drawBoardView; +@property (strong, nonatomic) NoteEntity *noteEntity; +- (IBAction)modifyDrawNote:(id)sender; +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/DrawNoteDetailViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/DrawNoteDetailViewController.m" new file mode 100644 index 00000000..787349bc --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/DrawNoteDetailViewController.m" @@ -0,0 +1,33 @@ +// +// DrawNoteDetailViewController.m +// NoteBook +// +// Created by 陆钟豪 on 14/11/18. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import "DrawNoteDetailViewController.h" + +@interface DrawNoteDetailViewController () + +@end + +@implementation DrawNoteDetailViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + if(self.noteEntity.type == DrawNote) { + [self.drawBoardView readFromFile: self.noteEntity.content]; + } +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + + +- (IBAction)modifyDrawNote:(id)sender { + [self.drawBoardView writeToFile:self.noteEntity.content]; +} +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Images.xcassets/AppIcon.appiconset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Images.xcassets/AppIcon.appiconset/Contents.json" new file mode 100644 index 00000000..118c98f7 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Images.xcassets/AppIcon.appiconset/Contents.json" @@ -0,0 +1,38 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Info.plist" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Info.plist" new file mode 100644 index 00000000..3a7bb582 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Info.plist" @@ -0,0 +1,40 @@ + + + + + CFBundleDevelopmentRegion + zh_CN + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + cstlab.lzh.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/MainViewController.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/MainViewController.h" new file mode 100644 index 00000000..9b2edf8f --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/MainViewController.h" @@ -0,0 +1,17 @@ +// +// MainViewController.h +// NoteBook +// +// Created by 陆钟豪 on 14/11/15. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import + +@interface MainViewController : UIViewController + +@property (weak, nonatomic) IBOutlet UITableView *noteTableView; + +- (IBAction)takePhoto:(id)sender; + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/MainViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/MainViewController.m" new file mode 100644 index 00000000..ef6a8bec --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/MainViewController.m" @@ -0,0 +1,148 @@ +// +// MainViewController.m +// NoteBook +// +// Created by 陆钟豪 on 14/11/15. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import +#import "MainViewController.h" +#import "NoteEntity.h" +#import "NoteDAO.h" +#import "NoteTableViewCell.h" + +@interface MainViewController () + +@end + +@implementation MainViewController +{ + NoteDAO* _noteDAO; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + _noteDAO = [NoteDAO new]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +- (void)viewWillAppear:(BOOL)animated +{ + [super viewWillAppear:animated]; + [self.noteTableView reloadData]; +} + +- (NSInteger)tableView:(UITableView *)tableView + numberOfRowsInSection:(NSInteger)section +{ + return [_noteDAO getAllCount]; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView + cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + static NSString *CellIdentifier = @"NoteListCell"; + UITableViewCell *cell = [tableView + dequeueReusableCellWithIdentifier:CellIdentifier]; + if(cell == nil) // 回收双端队列中没有元素,新建元素 + cell = [[NoteTableViewCell alloc] + initWithStyle:UITableViewCellStyleDefault + reuseIdentifier:CellIdentifier]; + NoteEntity *note = [_noteDAO loadNoteByOffset:indexPath.row]; + if(note.type == WordNote) { + cell.textLabel.text = note.content; + } + else if(note.type == PicNote) { + cell.textLabel.text = @"[图片]"; + } + else { + cell.textLabel.text = note.content; + } + [cell setValue:note forKey:@"noteEntity"]; + return cell; +} + +- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { + if (editingStyle == UITableViewCellEditingStyleDelete) { + NoteEntity* note = [[tableView cellForRowAtIndexPath:indexPath] valueForKey:@"noteEntity"]; + [_noteDAO deleteNoteById:note.id]; + [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:UITableViewRowAnimationTop]; + } +} + +- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return @"删除"; +} + +-(void)tableView:(UITableView *)tableView +didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + NoteEntity *note = [[tableView cellForRowAtIndexPath:indexPath] valueForKey:@"noteEntity"]; + if(note.type == WordNote) { + [self performSegueWithIdentifier:@"noteDetailSegue" sender:note]; + } + else if(note.type == PicNote) { + [self performSegueWithIdentifier:@"picNoteDetailSegue" sender:note]; + } + else if(note.type == DrawNote) { + [self performSegueWithIdentifier:@"drawNoteDetailSegue" sender:note]; + } +} + +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender +{ + UIViewController *destination = segue.destinationViewController; + if ([segue.identifier isEqualToString:@"noteDetailSegue"] || [segue.identifier isEqualToString:@"picNoteDetailSegue"] || [segue.identifier isEqualToString:@"drawNoteDetailSegue"]) + [destination setValue:sender forKeyPath:@"noteEntity"]; +} + + + +- (IBAction)takePhoto:(id)sender { + UIImagePickerController *picker = [[UIImagePickerController alloc] init]; + + if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { + picker.sourceType = UIImagePickerControllerSourceTypeCamera; + picker.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:picker.sourceType]; + picker.delegate = self; + picker.allowsEditing = YES; + } + + [self presentViewController:picker animated:YES completion:^{NSLog(@"hello");}]; +} + +-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info +{ + if ([[info objectForKey:UIImagePickerControllerMediaType] isEqualToString:(NSString*)kUTTypeImage]) { + UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; + NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; + NSLog(@"doc path is %@", docPath); + NSString *imagePath = [docPath stringByAppendingPathComponent:@"image"]; + NSFileManager *fileManager = [NSFileManager defaultManager]; + [fileManager createDirectoryAtPath:imagePath withIntermediateDirectories:YES attributes:nil error:nil]; + NSDateFormatter *dateFormatter = [NSDateFormatter new]; + [dateFormatter setDateFormat:@"yyyy_MM_dd_HH_mm_ss_SSSS"]; + NSDate* nowDate = [[NSDate alloc] init]; + NSString *imageFilePath = [imagePath stringByAppendingFormat:@"/%@.%@", [dateFormatter stringFromDate:nowDate], @"jpg"]; + + NSData *imageData = UIImageJPEGRepresentation(image, 1); + if([imageData writeToFile:imageFilePath atomically:YES]) { + NSLog(@"image write to file success, file is %@", imageFilePath); + NoteEntity *note = [[NoteEntity alloc] initWithType:PicNote andContent:imageFilePath]; + [_noteDAO insertNote:note]; + } + else { + NSLog(@"image wiret to file failed, file is %@", imageFilePath); + } + } + [picker dismissViewControllerAnimated:YES completion:nil]; +} + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NewDrawNoteViewController.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NewDrawNoteViewController.h" new file mode 100644 index 00000000..ca3553d8 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NewDrawNoteViewController.h" @@ -0,0 +1,16 @@ +// +// DrawBoardViewController.h +// NoteBook +// +// Created by 陆钟豪 on 14/11/17. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import +#import "DrawBoardView.h" + +@interface NewDrawNoteViewController : UIViewController + +@property (weak, nonatomic) IBOutlet DrawBoardView *drawBoardView; + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NewDrawNoteViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NewDrawNoteViewController.m" new file mode 100644 index 00000000..e7e1200b --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NewDrawNoteViewController.m" @@ -0,0 +1,51 @@ +// +// DrawBoardViewController.m +// NoteBook +// +// Created by 陆钟豪 on 14/11/17. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import "NewDrawNoteViewController.h" +#import "NoteEntity.h" +#import "NoteDAO.h" + +@interface NewDrawNoteViewController () + +@end + +@implementation NewDrawNoteViewController +{ + NoteDAO* _noteDAO; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + _noteDAO = [NoteDAO new]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +- (IBAction)saveDrawNote:(id)sender { + NSString *drawPath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"draw_note"]; + NSFileManager *fileManager = [NSFileManager defaultManager]; + [fileManager createDirectoryAtPath:drawPath withIntermediateDirectories:YES attributes:nil error:nil]; + NSDateFormatter *dateFormatter = [NSDateFormatter new]; + [dateFormatter setDateFormat:@"yyyy_MM_dd_HH_mm_ss_SSSS"]; + NSDate* nowDate = [[NSDate alloc] init]; + NSString *drawFilePath = [drawPath stringByAppendingFormat:@"/%@.%@", [dateFormatter stringFromDate:nowDate], @"draw"]; + if([self.drawBoardView writeToFile:drawFilePath]) { + NoteEntity* note = [[NoteEntity alloc] initWithType:DrawNote andContent:drawFilePath]; + [_noteDAO insertNote:note]; + NSLog(@"draw note write to file success, file path is %@", drawFilePath); + } + else { + NSLog(@"draw note write to file failed, file path is %@", drawFilePath); + } + [self.navigationController popViewControllerAnimated:YES]; +} + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NewNoteViewController.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NewNoteViewController.h" new file mode 100644 index 00000000..b83495bb --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NewNoteViewController.h" @@ -0,0 +1,17 @@ +// +// NewNoteViewController.h +// NoteBook +// +// Created by 陆钟豪 on 14/11/15. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import + +@interface NewNoteViewController : UIViewController + +@property (weak, nonatomic) IBOutlet UITextView *noteContentTextView; + +- (IBAction)saveNote:(id)sender; + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NewNoteViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NewNoteViewController.m" new file mode 100644 index 00000000..0e6b040d --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NewNoteViewController.m" @@ -0,0 +1,49 @@ +// +// NewNoteViewController.m +// NoteBook +// +// Created by 陆钟豪 on 14/11/15. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import "NewNoteViewController.h" +#import "NoteEntity.h" +#import "NoteDAO.h" + +@interface NewNoteViewController () + +@end + +@implementation NewNoteViewController +{ + NoteDAO* _noteDAO; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + _noteDAO = [NoteDAO new]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +- (IBAction)saveNote:(id)sender { + NoteEntity *newNote = [[NoteEntity alloc] initWithType:WordNote andContent:[self.noteContentTextView text]]; + [_noteDAO insertNote:newNote]; + [self.navigationController popViewControllerAnimated:true]; +} + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteDAO.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteDAO.h" new file mode 100644 index 00000000..16226ff2 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteDAO.h" @@ -0,0 +1,25 @@ +// +// NoteDAO.h +// NoteBook +// +// Created by 陆钟豪 on 14/11/15. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import +#import "NoteEntity.h" + +@interface NoteDAO : NSObject + +-(instancetype) init; +-(void) createTable; +-(void) insertNote:(NoteEntity*) noteEntity; +-(void) deleteNoteById:(NSInteger) id; +-(void) updateNote:(NoteEntity*) noteEntity; +-(NSMutableArray*) queryNoteByOffset:(NSInteger) offset andLength:(NSInteger) length; +-(NoteEntity*) loadNoteByOffset:(NSInteger) offset; +-(NoteEntity*) loadNoteById:(NSInteger) id; +-(NSInteger) getAllCount; +-(void) dealloc; + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteDAO.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteDAO.m" new file mode 100644 index 00000000..579e56b2 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteDAO.m" @@ -0,0 +1,168 @@ +// +// NoteDAO.m +// NoteBook +// +// Created by 陆钟豪 on 14/11/15. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import +#import "NoteDAO.h" +#import "SQLiteHelper.h" + +@implementation NoteDAO + +-(instancetype)init { + self = [super init]; + [self createTable]; + return self; +} + +-(void) createTable { + char *errorMsg; + if (sqlite3_exec([SQLiteHelper getDBHandle], "create table if not exists tb_note (id integer primary key autoincrement,type integer, content text not null);", NULL, NULL, &errorMsg)!=SQLITE_OK) { + NSLog(@"create table error:%s", errorMsg); + } + else{ + NSLog(@"create table success"); + } + sqlite3_free(errorMsg); +} + +-(void) insertNote:(NoteEntity*) noteEntity { + char *sql = "insert into tb_note(type, content) values(?, ?);"; + sqlite3_stmt *statement; + if(sqlite3_prepare_v2([SQLiteHelper getDBHandle], sql, -1, &statement, NULL)!=SQLITE_OK) { + NSLog(@"insert sql step failed"); + return; + } + sqlite3_bind_int(statement, 1, noteEntity.type); + const char *content = [noteEntity.content cStringUsingEncoding:NSUTF8StringEncoding]; + sqlite3_bind_text(statement, 2, content, (int)strlen(content), SQLITE_STATIC); + int stepResult = sqlite3_step(statement); + if (stepResult!=SQLITE_DONE) { + NSLog(@"insert sql step failed, step result is %d", stepResult); + } + else { + NSLog(@"insert sql step success"); + } + sqlite3_finalize(statement); +} + +-(void) deleteNoteById:(NSInteger) id { + char *sql = "delete from tb_note where id = ?"; + sqlite3_stmt *statement; + if(sqlite3_prepare_v2([SQLiteHelper getDBHandle], sql, -1, &statement, NULL)!=SQLITE_OK) { + NSLog(@"delete sql prepare failed"); + return; + } + sqlite3_bind_int(statement, 1, (int)id); + if (sqlite3_step(statement)!=SQLITE_DONE) { + sqlite3_finalize(statement); + NSLog(@"delete sql step failed"); + return; + } + sqlite3_finalize(statement); +} + +-(void) updateNote:(NoteEntity*) noteEntity { + char *sql = "update tb_note set content = ? where id = ?"; + sqlite3_stmt *statement; + if(sqlite3_prepare_v2([SQLiteHelper getDBHandle], sql, -1, &statement, NULL)!=SQLITE_OK) { + NSLog(@"update sql prepare failed"); + return; + } + const char *content = [noteEntity.content cStringUsingEncoding:NSUTF8StringEncoding]; + sqlite3_bind_text(statement, 1, content, (int)strlen(content), SQLITE_STATIC); + sqlite3_bind_int(statement, 2, (int)noteEntity.id); + if (sqlite3_step(statement)!=SQLITE_DONE) { + sqlite3_finalize(statement); + NSLog(@"update sql step failed"); + return; + } + sqlite3_finalize(statement); +} + +-(NSMutableArray*) queryNoteByOffset:(NSInteger) offset andLength:(NSInteger) length { + char *sql = "select id, type, content from tb_note order by id limit ?, ?"; + sqlite3_stmt *statement; + if(sqlite3_prepare_v2([SQLiteHelper getDBHandle], sql, -1, &statement, NULL)!=SQLITE_OK) { + NSLog(@"query sql prepare failed"); + return nil; + } + sqlite3_bind_int(statement, 1, (int)offset); + sqlite3_bind_int(statement, 2, (int)length); + NSMutableArray *result = [NSMutableArray new]; + while(sqlite3_step(statement) == SQLITE_ROW) { + NoteEntity *note = [NoteEntity new]; + note.id = sqlite3_column_int(statement, 0); + note.type = sqlite3_column_int(statement, 1); + note.content = [[NSString alloc] initWithCString:(const char*)sqlite3_column_text(statement, 2) encoding:NSUTF8StringEncoding]; + [result addObject:note]; + } + sqlite3_finalize(statement); + return result; +} + +-(NoteEntity*) loadNoteByOffset:(NSInteger) offset { + char *sql = "select id, type, content from tb_note order by id limit 1 offset ?"; + sqlite3_stmt *statement; + if(sqlite3_prepare_v2([SQLiteHelper getDBHandle], sql, -1, &statement, NULL)!=SQLITE_OK) { + NSLog(@"query sql prepare failed"); + return nil; + } + sqlite3_bind_int(statement, 1, (int)offset); + NoteEntity *note = nil; + int stepResult = sqlite3_step(statement); + if(stepResult == SQLITE_ROW) { + note = [NoteEntity new]; + note.id = sqlite3_column_int(statement, 0); + note.type = sqlite3_column_int(statement, 1); + note.content = [[NSString alloc] initWithCString:(const char*)sqlite3_column_text(statement, 2) encoding:NSUTF8StringEncoding]; + } + else { + NSLog(@"load note by offset not found, step result is %d", stepResult); + } + sqlite3_finalize(statement); + return note; +} + +-(NoteEntity*) loadNoteById:(NSInteger) id { + char *sql = "select id, type, content from tb_note where id = ?"; + sqlite3_stmt *statement; + if(sqlite3_prepare_v2([SQLiteHelper getDBHandle], sql, -1, &statement, NULL)!=SQLITE_OK) { + NSLog(@"load sql prepare failed"); + return nil; + } + sqlite3_bind_int(statement, 0, (int)id); + if(sqlite3_step(statement) == SQLITE_ROW) { + NoteEntity *note = [NoteEntity new]; + note.id = sqlite3_column_int(statement, 0); + note.type = sqlite3_column_int(statement, 1); + note.content = [[NSString alloc] initWithCString:(const char*)sqlite3_column_text(statement, 2) encoding:NSUTF8StringEncoding]; + return note; + } + return nil; +} + +-(NSInteger) getAllCount { + char *sql = "select count(*) from tb_note"; + sqlite3_stmt *statement; + if(sqlite3_prepare_v2([SQLiteHelper getDBHandle], sql, -1, &statement, NULL)!=SQLITE_OK) { + NSLog(@"get all count sql prepare failed"); + return 0; + } + NSInteger allCount = 0; + if(sqlite3_step(statement) == SQLITE_ROW) { + allCount = sqlite3_column_int(statement, 0); + } + sqlite3_finalize(statement); + return allCount; + +} + +-(void) dealloc { + [SQLiteHelper relaseDBHandle]; +} + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteDetailViewController.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteDetailViewController.h" new file mode 100644 index 00000000..adec227c --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteDetailViewController.h" @@ -0,0 +1,18 @@ +// +// NoteDetailViewController.h +// NoteBook +// +// Created by 陆钟豪 on 14/11/16. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import +#import "NoteEntity.h" + +@interface NoteDetailViewController : UIViewController + +@property (weak, nonatomic) IBOutlet UITextView *noteContentTextView; +@property (strong, nonatomic) NoteEntity *noteEntity; +- (IBAction)modifyNote:(id)sender; + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteDetailViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteDetailViewController.m" new file mode 100644 index 00000000..816cfffa --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteDetailViewController.m" @@ -0,0 +1,37 @@ +// +// NoteDetailViewController.m +// NoteBook +// +// Created by 陆钟豪 on 14/11/16. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import "NoteDetailViewController.h" +#import "NoteDAO.h" + +@interface NoteDetailViewController () +{ + NoteDAO *_noteDAO; +} + +@end + +@implementation NoteDetailViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + _noteDAO = [NoteDAO new]; + self.noteContentTextView.text = self.noteEntity.content; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +- (IBAction)modifyNote:(id)sender { + self.noteEntity.content = self.noteContentTextView.text; + [_noteDAO updateNote:self.noteEntity]; + [self.navigationController popViewControllerAnimated:YES]; +} +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteEntity.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteEntity.h" new file mode 100644 index 00000000..3c711a0f --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteEntity.h" @@ -0,0 +1,25 @@ +// +// NoteEntity.h +// NoteBook +// +// Created by 陆钟豪 on 14/11/15. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import + +typedef NS_ENUM(NSInteger, NoteEntityType) { // 笔记类型 + WordNote, // 纯文字笔记 + PicNote, // 图片笔记 + DrawNote // 涂鸦笔记 +}; + +@interface NoteEntity : NSObject + +@property NSInteger id; +@property NoteEntityType type; +@property (copy) NSString* content; + +-(instancetype) initWithType:(NoteEntityType) type andContent:(NSString*) content; + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteEntity.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteEntity.m" new file mode 100644 index 00000000..2799aeeb --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteEntity.m" @@ -0,0 +1,20 @@ +// +// NoteEntity.m +// NoteBook +// +// Created by 陆钟豪 on 14/11/15. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import "NoteEntity.h" + +@implementation NoteEntity + +-(instancetype) initWithType:(NoteEntityType) type andContent:(NSString*) content { + self = [super init]; + self.type = type; + self.content = content; + return self; +} + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteTableViewCell.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteTableViewCell.h" new file mode 100644 index 00000000..ee50b19f --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteTableViewCell.h" @@ -0,0 +1,16 @@ +// +// NoteTableViewCell.h +// NoteBook +// +// Created by 陆钟豪 on 14/11/16. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import +#import "NoteEntity.h" + +@interface NoteTableViewCell : UITableViewCell + +@property (strong, nonatomic) NoteEntity *noteEntity; + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteTableViewCell.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteTableViewCell.m" new file mode 100644 index 00000000..46871762 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteTableViewCell.m" @@ -0,0 +1,23 @@ +// +// NoteTableViewCell.m +// NoteBook +// +// Created by 陆钟豪 on 14/11/16. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import "NoteTableViewCell.h" + +@implementation NoteTableViewCell + +- (void)awakeFromNib { + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/PicNoteDetailViewController.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/PicNoteDetailViewController.h" new file mode 100644 index 00000000..1523531e --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/PicNoteDetailViewController.h" @@ -0,0 +1,17 @@ +// +// PicNoteViewController.h +// NoteBook +// +// Created by 陆钟豪 on 14/11/16. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import +#import "NoteEntity.h" + +@interface PicNoteDetailViewController : UIViewController + +@property (weak, nonatomic) IBOutlet UIImageView *noteImageView; +@property (strong, nonatomic) NoteEntity *noteEntity; + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/PicNoteDetailViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/PicNoteDetailViewController.m" new file mode 100644 index 00000000..615b6d26 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/PicNoteDetailViewController.m" @@ -0,0 +1,29 @@ +// +// PicNoteViewController.m +// NoteBook +// +// Created by 陆钟豪 on 14/11/16. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import "PicNoteDetailViewController.h" + +@interface PicNoteDetailViewController () + +@end + +@implementation PicNoteDetailViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + if(self.noteEntity.type == PicNote) { + UIImage *image=[[UIImage alloc]initWithContentsOfFile:self.noteEntity.content]; + self.noteImageView.image = image; + } +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; +} + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/SQLiteHelper.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/SQLiteHelper.h" new file mode 100644 index 00000000..725e2ce1 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/SQLiteHelper.h" @@ -0,0 +1,16 @@ +// +// SQLiteConnection.h +// NoteBook +// +// Created by 陆钟豪 on 14/11/15. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import +#import + +// 非线程安全 +@interface SQLiteHelper : NSObject ++ (sqlite3 *) getDBHandle; ++ (void) relaseDBHandle; +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/SQLiteHelper.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/SQLiteHelper.m" new file mode 100644 index 00000000..c1c2dae4 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/SQLiteHelper.m" @@ -0,0 +1,54 @@ +// +// SQLiteConnection.m +// NoteBook +// +// Created by 陆钟豪 on 14/11/15. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import "SQLiteHelper.h" + +static sqlite3 *dbHandle = nil; + +@implementation SQLiteHelper + ++ (sqlite3 *) getDBHandle { + if(dbHandle == nil) { + NSString *dbPath=[NSString stringWithFormat:@"%@/Documents/note_book.db",NSHomeDirectory()]; + if(sqlite3_open([dbPath UTF8String], &dbHandle)==SQLITE_OK) { + NSLog(@"打开数据库成功!"); + } + } + return dbHandle; +} + ++ (void) relaseDBHandle{ + NSLog(@"关闭数据库中!"); + int closeResult = sqlite3_close(dbHandle); + if(closeResult==SQLITE_OK){ + NSLog(@"关闭数据库成功!"); + dbHandle = nil; + } + else if(closeResult == SQLITE_BUSY) + { + // shouldn't happen in a good written application but let's handle it + NSLog(@"sqlite is busy, try to finalize some stmts"); + sqlite3_stmt *stmt; + while ((stmt = sqlite3_next_stmt(dbHandle, NULL)) != NULL) { + sqlite3_finalize(stmt); + } + closeResult = sqlite3_close(dbHandle); + if (closeResult == SQLITE_OK) { + NSLog(@"close db success"); + dbHandle = nil; + } + else { + NSLog(@"close db failed, colse result is %d", closeResult); + } + } + else { + NSLog(@"close db failed, colse result is %d", closeResult); + } +} + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/ViewController.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/ViewController.h" new file mode 100644 index 00000000..4df414df --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/ViewController.h" @@ -0,0 +1,15 @@ +// +// ViewController.h +// NoteBook +// +// Created by 陆钟豪 on 14/11/15. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import + +@interface ViewController : UITabBarController + + +@end + diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/ViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/ViewController.m" new file mode 100644 index 00000000..79ddbc5a --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/ViewController.m" @@ -0,0 +1,27 @@ +// +// ViewController.m +// NoteBook +// +// Created by 陆钟豪 on 14/11/15. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import "ViewController.h" + +@interface ViewController () + +@end + +@implementation ViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view, typically from a nib. +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/main.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/main.m" new file mode 100644 index 00000000..f830ca6a --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/main.m" @@ -0,0 +1,16 @@ +// +// main.m +// NoteBook +// +// Created by 陆钟豪 on 14/11/15. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBookTests/Info.plist" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBookTests/Info.plist" new file mode 100644 index 00000000..dd0bff1c --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBookTests/Info.plist" @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + cstlab.lzh.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBookTests/NoteBookTests.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBookTests/NoteBookTests.m" new file mode 100644 index 00000000..b8d5fe70 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBookTests/NoteBookTests.m" @@ -0,0 +1,40 @@ +// +// NoteBookTests.m +// NoteBookTests +// +// Created by 陆钟豪 on 14/11/15. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import +#import + +@interface NoteBookTests : XCTestCase + +@end + +@implementation NoteBookTests + +- (void)setUp { + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; +} + +- (void)testExample { + // This is an example of a functional test case. + XCTAssert(YES, @"Pass"); +} + +- (void)testPerformanceExample { + // This is an example of a performance test case. + [self measureBlock:^{ + // Put the code you want to measure the time of here. + }]; +} + +@end From 7b6a060fc647aa116d27490489a65d580a627d09 Mon Sep 17 00:00:00 2001 From: varvelworld Date: Tue, 18 Nov 2014 16:30:52 +0800 Subject: [PATCH 02/19] refactor some code --- .../NoteBook.xcodeproj/project.pbxproj" | 110 ++++++++++---- .../NoteBook/Base.lproj/Main.storyboard" | 142 ++++++++++++------ .../Project4/NoteBook/MainViewController.h" | 4 +- .../Project4/NoteBook/MainViewController.m" | 43 ------ .../NoteBook/TakePhotoViewController.h" | 13 ++ .../NoteBook/TakePhotoViewController.m" | 66 ++++++++ 6 files changed, 252 insertions(+), 126 deletions(-) create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/TakePhotoViewController.h" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/TakePhotoViewController.m" diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook.xcodeproj/project.pbxproj" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook.xcodeproj/project.pbxproj" index 09f6c962..ce715d4e 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook.xcodeproj/project.pbxproj" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook.xcodeproj/project.pbxproj" @@ -18,11 +18,11 @@ EC0383A81A189F7B0047C77C /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC0383A71A189F7B0047C77C /* MobileCoreServices.framework */; }; EC0383AB1A18C4D30047C77C /* PicNoteDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EC0383AA1A18C4D30047C77C /* PicNoteDetailViewController.m */; }; EC282FF41A1A564D00F4FE9C /* DrawNoteDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EC282FF31A1A564D00F4FE9C /* DrawNoteDetailViewController.m */; }; + EC451FBE1A1B3556007B4AB2 /* TakePhotoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EC451FBD1A1B3556007B4AB2 /* TakePhotoViewController.m */; }; EC457F0C1A19D47700913847 /* NewDrawNoteViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EC457F0B1A19D47700913847 /* NewDrawNoteViewController.m */; }; EC457F0F1A19D78900913847 /* DrawBoardView.m in Sources */ = {isa = PBXBuildFile; fileRef = EC457F0E1A19D78900913847 /* DrawBoardView.m */; }; EC4FF8DA1A17240E00049173 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = EC4FF8D91A17240E00049173 /* main.m */; }; EC4FF8DD1A17240E00049173 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = EC4FF8DC1A17240E00049173 /* AppDelegate.m */; }; - EC4FF8E01A17240E00049173 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EC4FF8DF1A17240E00049173 /* ViewController.m */; }; EC4FF8E31A17240E00049173 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = EC4FF8E11A17240E00049173 /* Main.storyboard */; }; EC4FF8E51A17240E00049173 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EC4FF8E41A17240E00049173 /* Images.xcassets */; }; EC4FF8E81A17240E00049173 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = EC4FF8E61A17240E00049173 /* LaunchScreen.xib */; }; @@ -60,6 +60,8 @@ EC0383AA1A18C4D30047C77C /* PicNoteDetailViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PicNoteDetailViewController.m; sourceTree = ""; }; EC282FF21A1A564D00F4FE9C /* DrawNoteDetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DrawNoteDetailViewController.h; sourceTree = ""; }; EC282FF31A1A564D00F4FE9C /* DrawNoteDetailViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DrawNoteDetailViewController.m; sourceTree = ""; }; + EC451FBC1A1B3556007B4AB2 /* TakePhotoViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TakePhotoViewController.h; sourceTree = ""; }; + EC451FBD1A1B3556007B4AB2 /* TakePhotoViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TakePhotoViewController.m; sourceTree = ""; }; EC457F0A1A19D47700913847 /* NewDrawNoteViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NewDrawNoteViewController.h; sourceTree = ""; }; EC457F0B1A19D47700913847 /* NewDrawNoteViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NewDrawNoteViewController.m; sourceTree = ""; }; EC457F0D1A19D78900913847 /* DrawBoardView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DrawBoardView.h; sourceTree = ""; }; @@ -69,8 +71,6 @@ EC4FF8D91A17240E00049173 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; EC4FF8DB1A17240E00049173 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; EC4FF8DC1A17240E00049173 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - EC4FF8DE1A17240E00049173 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; - EC4FF8DF1A17240E00049173 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; EC4FF8E21A17240E00049173 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; EC4FF8E41A17240E00049173 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; EC4FF8E71A17240E00049173 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; @@ -99,6 +99,75 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + EC451FB61A1B2600007B4AB2 /* Note */ = { + isa = PBXGroup; + children = ( + EC0383991A17689C0047C77C /* NewNoteViewController.h */, + EC03839A1A17689C0047C77C /* NewNoteViewController.m */, + EC0383A11A1871860047C77C /* NoteDetailViewController.h */, + EC0383A21A1871860047C77C /* NoteDetailViewController.m */, + ); + name = Note; + sourceTree = ""; + }; + EC451FB71A1B2626007B4AB2 /* DB */ = { + isa = PBXGroup; + children = ( + EC0383901A17345B0047C77C /* NoteEntity.h */, + EC0383911A17345B0047C77C /* NoteEntity.m */, + EC0383931A1736BD0047C77C /* NoteDAO.h */, + EC0383941A1736BD0047C77C /* NoteDAO.m */, + EC0383961A17392C0047C77C /* SQLiteHelper.h */, + EC0383971A17392C0047C77C /* SQLiteHelper.m */, + ); + name = DB; + sourceTree = ""; + }; + EC451FB81A1B265B007B4AB2 /* UI */ = { + isa = PBXGroup; + children = ( + EC4FF8E11A17240E00049173 /* Main.storyboard */, + EC4FF8E41A17240E00049173 /* Images.xcassets */, + EC4FF8E61A17240E00049173 /* LaunchScreen.xib */, + ); + name = UI; + sourceTree = ""; + }; + EC451FB91A1B2687007B4AB2 /* Main */ = { + isa = PBXGroup; + children = ( + EC0383A41A18795D0047C77C /* NoteTableViewCell.h */, + EC0383A51A18795D0047C77C /* NoteTableViewCell.m */, + EC03839C1A176E2D0047C77C /* MainViewController.h */, + EC03839D1A176E2D0047C77C /* MainViewController.m */, + ); + name = Main; + sourceTree = ""; + }; + EC451FBA1A1B26A9007B4AB2 /* PicNote */ = { + isa = PBXGroup; + children = ( + EC0383A91A18C4D30047C77C /* PicNoteDetailViewController.h */, + EC0383AA1A18C4D30047C77C /* PicNoteDetailViewController.m */, + EC451FBC1A1B3556007B4AB2 /* TakePhotoViewController.h */, + EC451FBD1A1B3556007B4AB2 /* TakePhotoViewController.m */, + ); + name = PicNote; + sourceTree = ""; + }; + EC451FBB1A1B26C1007B4AB2 /* DrawNote */ = { + isa = PBXGroup; + children = ( + EC457F0A1A19D47700913847 /* NewDrawNoteViewController.h */, + EC457F0B1A19D47700913847 /* NewDrawNoteViewController.m */, + EC457F0D1A19D78900913847 /* DrawBoardView.h */, + EC457F0E1A19D78900913847 /* DrawBoardView.m */, + EC282FF21A1A564D00F4FE9C /* DrawNoteDetailViewController.h */, + EC282FF31A1A564D00F4FE9C /* DrawNoteDetailViewController.m */, + ); + name = DrawNote; + sourceTree = ""; + }; EC4FF8CB1A17240E00049173 = { isa = PBXGroup; children = ( @@ -122,36 +191,15 @@ EC4FF8D61A17240E00049173 /* NoteBook */ = { isa = PBXGroup; children = ( + EC451FB91A1B2687007B4AB2 /* Main */, + EC451FB61A1B2600007B4AB2 /* Note */, + EC451FBA1A1B26A9007B4AB2 /* PicNote */, + EC451FBB1A1B26C1007B4AB2 /* DrawNote */, + EC451FB81A1B265B007B4AB2 /* UI */, + EC451FB71A1B2626007B4AB2 /* DB */, EC4FF8DB1A17240E00049173 /* AppDelegate.h */, EC4FF8DC1A17240E00049173 /* AppDelegate.m */, - EC4FF8DE1A17240E00049173 /* ViewController.h */, - EC4FF8DF1A17240E00049173 /* ViewController.m */, - EC4FF8E11A17240E00049173 /* Main.storyboard */, - EC4FF8E41A17240E00049173 /* Images.xcassets */, - EC4FF8E61A17240E00049173 /* LaunchScreen.xib */, EC4FF8D71A17240E00049173 /* Supporting Files */, - EC0383901A17345B0047C77C /* NoteEntity.h */, - EC0383911A17345B0047C77C /* NoteEntity.m */, - EC0383931A1736BD0047C77C /* NoteDAO.h */, - EC0383941A1736BD0047C77C /* NoteDAO.m */, - EC0383961A17392C0047C77C /* SQLiteHelper.h */, - EC0383971A17392C0047C77C /* SQLiteHelper.m */, - EC0383991A17689C0047C77C /* NewNoteViewController.h */, - EC03839A1A17689C0047C77C /* NewNoteViewController.m */, - EC03839C1A176E2D0047C77C /* MainViewController.h */, - EC03839D1A176E2D0047C77C /* MainViewController.m */, - EC0383A11A1871860047C77C /* NoteDetailViewController.h */, - EC0383A21A1871860047C77C /* NoteDetailViewController.m */, - EC0383A41A18795D0047C77C /* NoteTableViewCell.h */, - EC0383A51A18795D0047C77C /* NoteTableViewCell.m */, - EC0383A91A18C4D30047C77C /* PicNoteDetailViewController.h */, - EC0383AA1A18C4D30047C77C /* PicNoteDetailViewController.m */, - EC457F0A1A19D47700913847 /* NewDrawNoteViewController.h */, - EC457F0B1A19D47700913847 /* NewDrawNoteViewController.m */, - EC457F0D1A19D78900913847 /* DrawBoardView.h */, - EC457F0E1A19D78900913847 /* DrawBoardView.m */, - EC282FF21A1A564D00F4FE9C /* DrawNoteDetailViewController.h */, - EC282FF31A1A564D00F4FE9C /* DrawNoteDetailViewController.m */, ); path = NoteBook; sourceTree = ""; @@ -285,8 +333,8 @@ EC0383951A1736BD0047C77C /* NoteDAO.m in Sources */, EC282FF41A1A564D00F4FE9C /* DrawNoteDetailViewController.m in Sources */, EC0383981A17392C0047C77C /* SQLiteHelper.m in Sources */, - EC4FF8E01A17240E00049173 /* ViewController.m in Sources */, EC03839E1A176E2D0047C77C /* MainViewController.m in Sources */, + EC451FBE1A1B3556007B4AB2 /* TakePhotoViewController.m in Sources */, EC03839B1A17689C0047C77C /* NewNoteViewController.m in Sources */, EC457F0F1A19D78900913847 /* DrawBoardView.m in Sources */, EC457F0C1A19D47700913847 /* NewDrawNoteViewController.m in Sources */, diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Base.lproj/Main.storyboard" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Base.lproj/Main.storyboard" index f5430745..d7ca0bf1 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Base.lproj/Main.storyboard" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Base.lproj/Main.storyboard" @@ -4,10 +4,10 @@ - + - + @@ -17,11 +17,11 @@ - + - + @@ -35,12 +35,18 @@ - - + + + + + + + + @@ -71,18 +77,18 @@ - - - - - - - - + + + + + + + + @@ -91,9 +97,6 @@ - - - @@ -111,14 +114,23 @@ - - + + + + + + + + + + + @@ -149,12 +161,12 @@ - + - + - + @@ -163,8 +175,8 @@ - - + + @@ -174,7 +186,7 @@ - + @@ -185,20 +197,9 @@ - - + + - - - - - - - - - - - @@ -207,9 +208,18 @@ + + + + + + + + + - - + + @@ -219,7 +229,7 @@ - + @@ -233,14 +243,20 @@ - - + + + + + + + + @@ -249,6 +265,9 @@ + + + @@ -257,10 +276,28 @@ - + + + + + + + + + + + + + + + + + + + - + @@ -269,19 +306,26 @@ - - + + + + + + + + + - + @@ -301,7 +345,7 @@ - + diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/MainViewController.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/MainViewController.h" index 9b2edf8f..15edb6f7 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/MainViewController.h" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/MainViewController.h" @@ -8,10 +8,8 @@ #import -@interface MainViewController : UIViewController +@interface MainViewController : UIViewController @property (weak, nonatomic) IBOutlet UITableView *noteTableView; -- (IBAction)takePhoto:(id)sender; - @end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/MainViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/MainViewController.m" index ef6a8bec..58d88a6e 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/MainViewController.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/MainViewController.m" @@ -6,7 +6,6 @@ // Copyright (c) 2014年 lzh. All rights reserved. // -#import #import "MainViewController.h" #import "NoteEntity.h" #import "NoteDAO.h" @@ -103,46 +102,4 @@ - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender [destination setValue:sender forKeyPath:@"noteEntity"]; } - - -- (IBAction)takePhoto:(id)sender { - UIImagePickerController *picker = [[UIImagePickerController alloc] init]; - - if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { - picker.sourceType = UIImagePickerControllerSourceTypeCamera; - picker.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:picker.sourceType]; - picker.delegate = self; - picker.allowsEditing = YES; - } - - [self presentViewController:picker animated:YES completion:^{NSLog(@"hello");}]; -} - --(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info -{ - if ([[info objectForKey:UIImagePickerControllerMediaType] isEqualToString:(NSString*)kUTTypeImage]) { - UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; - NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; - NSLog(@"doc path is %@", docPath); - NSString *imagePath = [docPath stringByAppendingPathComponent:@"image"]; - NSFileManager *fileManager = [NSFileManager defaultManager]; - [fileManager createDirectoryAtPath:imagePath withIntermediateDirectories:YES attributes:nil error:nil]; - NSDateFormatter *dateFormatter = [NSDateFormatter new]; - [dateFormatter setDateFormat:@"yyyy_MM_dd_HH_mm_ss_SSSS"]; - NSDate* nowDate = [[NSDate alloc] init]; - NSString *imageFilePath = [imagePath stringByAppendingFormat:@"/%@.%@", [dateFormatter stringFromDate:nowDate], @"jpg"]; - - NSData *imageData = UIImageJPEGRepresentation(image, 1); - if([imageData writeToFile:imageFilePath atomically:YES]) { - NSLog(@"image write to file success, file is %@", imageFilePath); - NoteEntity *note = [[NoteEntity alloc] initWithType:PicNote andContent:imageFilePath]; - [_noteDAO insertNote:note]; - } - else { - NSLog(@"image wiret to file failed, file is %@", imageFilePath); - } - } - [picker dismissViewControllerAnimated:YES completion:nil]; -} - @end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/TakePhotoViewController.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/TakePhotoViewController.h" new file mode 100644 index 00000000..e661caf9 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/TakePhotoViewController.h" @@ -0,0 +1,13 @@ +// +// TakePhotoViewController.h +// NoteBook +// +// Created by 陆钟豪 on 14/11/18. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import + +@interface TakePhotoViewController : UIImagePickerController + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/TakePhotoViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/TakePhotoViewController.m" new file mode 100644 index 00000000..4c953b94 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/TakePhotoViewController.m" @@ -0,0 +1,66 @@ +// +// TakePhotoViewController.m +// NoteBook +// +// Created by 陆钟豪 on 14/11/18. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import +#import "TakePhotoViewController.h" +#import "NoteDAO.h" +#import "NoteEntity.h" + +@interface TakePhotoViewController () + +@end + +@implementation TakePhotoViewController +{ + NoteDAO* _noteDAO; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + _noteDAO = [NoteDAO new]; + if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { + self.sourceType = UIImagePickerControllerSourceTypeCamera; + self.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:self.sourceType]; + self.delegate = self; + self.allowsEditing = YES; + } + +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; +} + +-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info +{ + if ([[info objectForKey:UIImagePickerControllerMediaType] isEqualToString:(NSString*)kUTTypeImage]) { + UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; + NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; + NSLog(@"doc path is %@", docPath); + NSString *imagePath = [docPath stringByAppendingPathComponent:@"image"]; + NSFileManager *fileManager = [NSFileManager defaultManager]; + [fileManager createDirectoryAtPath:imagePath withIntermediateDirectories:YES attributes:nil error:nil]; + NSDateFormatter *dateFormatter = [NSDateFormatter new]; + [dateFormatter setDateFormat:@"yyyy_MM_dd_HH_mm_ss_SSSS"]; + NSDate* nowDate = [[NSDate alloc] init]; + NSString *imageFilePath = [imagePath stringByAppendingFormat:@"/%@.%@", [dateFormatter stringFromDate:nowDate], @"jpg"]; + + NSData *imageData = UIImageJPEGRepresentation(image, 1); + if([imageData writeToFile:imageFilePath atomically:YES]) { + NSLog(@"image write to file success, file is %@", imageFilePath); + NoteEntity *note = [[NoteEntity alloc] initWithType:PicNote andContent:imageFilePath]; + [_noteDAO insertNote:note]; + } + else { + NSLog(@"image wiret to file failed, file is %@", imageFilePath); + } + } + [picker dismissViewControllerAnimated:YES completion:nil]; +} + +@end From 1dca5d7a2b67951ceacb729c4d4af588231781b7 Mon Sep 17 00:00:00 2001 From: varvelworld Date: Tue, 18 Nov 2014 17:03:51 +0800 Subject: [PATCH 03/19] add app img and icon --- .../NoteBook.xcodeproj/project.pbxproj" | 2 + .../NoteBook/Base.lproj/Main.storyboard" | 8 +- .../AppIcon.appiconset/Contents.json" | 76 +++++++++++++++++- .../AppIcon.appiconset/ipad@1x.png" | Bin 0 -> 1628 bytes .../AppIcon.appiconset/ipad@2x.png" | Bin 0 -> 3833 bytes .../AppIcon.appiconset/iphone@2x.png" | Bin 0 -> 2941 bytes .../AppIcon.appiconset/iphone@3x.png" | Bin 0 -> 4787 bytes .../about.imageset/Contents.json" | 23 ++++++ .../about.imageset/about@1x.png" | Bin 0 -> 519 bytes .../about.imageset/about@2x.png" | Bin 0 -> 909 bytes .../about.imageset/about@3x.png" | Bin 0 -> 1561 bytes .../note.imageset/Contents.json" | 23 ++++++ .../note.imageset/note@1x.png" | Bin 0 -> 604 bytes .../note.imageset/note@2x.png" | Bin 0 -> 1078 bytes .../note.imageset/note@3x.png" | Bin 0 -> 1982 bytes 15 files changed, 129 insertions(+), 3 deletions(-) create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Images.xcassets/AppIcon.appiconset/ipad@1x.png" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Images.xcassets/AppIcon.appiconset/ipad@2x.png" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Images.xcassets/AppIcon.appiconset/iphone@2x.png" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Images.xcassets/AppIcon.appiconset/iphone@3x.png" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Images.xcassets/about.imageset/Contents.json" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Images.xcassets/about.imageset/about@1x.png" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Images.xcassets/about.imageset/about@2x.png" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Images.xcassets/about.imageset/about@3x.png" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Images.xcassets/note.imageset/Contents.json" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Images.xcassets/note.imageset/note@1x.png" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Images.xcassets/note.imageset/note@2x.png" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Images.xcassets/note.imageset/note@3x.png" diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook.xcodeproj/project.pbxproj" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook.xcodeproj/project.pbxproj" index ce715d4e..e4275c11 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook.xcodeproj/project.pbxproj" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook.xcodeproj/project.pbxproj" @@ -468,6 +468,7 @@ INFOPLIST_FILE = NoteBook/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; @@ -478,6 +479,7 @@ INFOPLIST_FILE = NoteBook/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; }; diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Base.lproj/Main.storyboard" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Base.lproj/Main.storyboard" index d7ca0bf1..be9a91dc 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Base.lproj/Main.storyboard" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Base.lproj/Main.storyboard" @@ -17,7 +17,7 @@ - + @@ -218,7 +218,7 @@ - + @@ -348,4 +348,8 @@ + + + + diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Images.xcassets/AppIcon.appiconset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Images.xcassets/AppIcon.appiconset/Contents.json" index 118c98f7..dda1c1e9 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Images.xcassets/AppIcon.appiconset/Contents.json" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Images.xcassets/AppIcon.appiconset/Contents.json" @@ -1,5 +1,10 @@ { "images" : [ + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "1x" + }, { "idiom" : "iphone", "size" : "29x29", @@ -22,13 +27,82 @@ }, { "idiom" : "iphone", - "size" : "60x60", + "size" : "57x57", + "scale" : "1x" + }, + { + "idiom" : "iphone", + "size" : "57x57", "scale" : "2x" }, { + "size" : "60x60", "idiom" : "iphone", + "filename" : "iphone@2x.png", + "scale" : "2x" + }, + { "size" : "60x60", + "idiom" : "iphone", + "filename" : "iphone@3x.png", "scale" : "3x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "50x50", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "50x50", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "72x72", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "72x72", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "ipad@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "ipad@2x.png", + "scale" : "2x" + }, + { + "idiom" : "car", + "size" : "120x120", + "scale" : "1x" } ], "info" : { diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Images.xcassets/AppIcon.appiconset/ipad@1x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Images.xcassets/AppIcon.appiconset/ipad@1x.png" new file mode 100644 index 0000000000000000000000000000000000000000..b35b703fdcf84df3f64502fb6c2162a714c0956e GIT binary patch literal 1628 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 literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Images.xcassets/AppIcon.appiconset/iphone@3x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Images.xcassets/AppIcon.appiconset/iphone@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..0b3f97f775a733396c84d5810c359515ee26fbad GIT binary patch literal 4787 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 LNkvXXu0mjfXD{V3 literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Images.xcassets/note.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Images.xcassets/note.imageset/Contents.json" new file mode 100644 index 00000000..629358ed --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Images.xcassets/note.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "note@1x.png" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "note@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x", + "filename" : "note@3x.png" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Images.xcassets/note.imageset/note@1x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Images.xcassets/note.imageset/note@1x.png" new file mode 100644 index 0000000000000000000000000000000000000000..882340ffb849acc77b3c28294d8eecaaf32e7aee GIT binary patch literal 604 zcmV-i0;BzjP)P000>X1^@s6#OZ}&00001b5ch_0Itp) z=>Px%7D+@wR7efQmc2_`Q5c8sO`D`v3U(0(2NwtF;Luu(lz=UQbAyX0=ps(ewnHs+ z)IkRaM{#RK5c~_;$u30)DMS=h6ttkWF}9$l&rdwz-s{Op{6JrLI3M?Y-=F8>J<;<5 zRwxu6!xa33N-T?01|En&s!%r;8hPG0;{ixS=1UC=d`LnX`oL-rBeVUHaV0|^r$%_k zYEEcpeBVC{21ZvB6%G29>T5Mh+5jJ+9kEc}&;W;oWV z&oS5uMc4O2i-I>}d6*$iK?w z;}X%bU)qAMI_DDEC0PcxDoCnr?SN5u6!mwB=-wZ~K{UuRmWYbdT4yd1?eS8nK<1;S z!VVR;ad3&8;_Zp4g#-8iZLkiX;Te2`1$YJ1un2l6Ct=vC!iR2spsj@=NJ0Vzp&s;q qnS@iI`80Gu9GamAV(Px&@JU2LRA>e5nn`FBK@^4^V>BdD!4TXK14cyyfrz4FkmyYiL`*J%7lnW~PYQa< z)q_VhC=&4|2qNxCFp4`GH{3I7To6=3j7l~gzkf)FNvC?9#Wv1^kFI`I^{U>h>gwv6 ziH&oSL?W@6>~*jnmO%+*TIyo4SX;VACpa0viACfcf=ZYIlOStCd$PYBj^Nn0pbd?8 zsi2XV2W3zMG03JUs2gAnPR$M4kmHD8NYiO56a+OIvb_3I2XWQMnXin@ccuM^nD4E-v6*N~4#W=Iyk27x1NN&46vNZ)*&*v`K zfiqfcTqUZGsMB&r3yq#t&jrA3YEl2Mi~3g!FVqu8rpsw*j+!Ig>aamJp_>k~;D8}N zIeaF4&UHk(n~1x;KL+WPFiNCGM9vs{=|k!GwkA3WAN4a)qy-~yf*8W#CVTlPIAZUU z=RJ;$>UWfvUr&cp3*;S1jYbsGV`fCcF2CAd3tv0afFq_Icj*uTs~U=H`E`-Q+M`qGWRiKvq7nWVw4k3_7NT2? z%`MOn#CBLm^pLkRR|7ATUY%o&(Z|zTuX6VMuv1HK^)Gf~8M>EU-v@J6n_)+!0s||F zo|fTEia*{5!agJU zZM;{ASwQmJc&{Lt^7GqxQ&eoa{5IYekbm=b%)CePjznz&{#PTS9j?=fqLW@btXo+D5MLZ8XBQC)e`q}U^VQt=?l@#hl5aN%PT^+ w52`?)w@D#A9yBd?Ly4u=mHSd?Ox0QGKQTH~mcTE`DF6Tf07*qoM6N<$f@c!(Qvd(} literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Images.xcassets/note.imageset/note@3x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Images.xcassets/note.imageset/note@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..5286a840ce5742b66ab7211dd4b32be9464a2f20 GIT binary patch literal 1982 zcmV;v2SNCWP)002t}1^@s6I8J)%00001b5ch_0Itp) z=>Px+cu7P-RCodHoJ(v}RT#%xUldS^$g7Ch)`~DVZ6B46F-DqMUDlt(p_yDQUPK&%$M3EvbwDtEJ=E8W>nYnl740D;@FZuP} znS1Uz-}#^Ko;i=1c6KDR>FMdKNxB9G;3?>Vb>REgK&xy=XJ_aAm!j}1k`z)BYA$J) z!4jAU3e;JGLpBUwyPzAc4DHcX2{XKnbPDwvTn`ICp@Ta_o{idFWN5=?)I>g~g3i&(vgRDcoK3w3q)NyQ@n%i8<|e;kej0XDsl z<7Y(J1jocSTg0-SE8#kD%xGUW7tuP>2sT^9LYtz^=kFtM`}vn0BM6o_!e*OTQG_{^ zFv2t=Y>Egwcm8GNzq3uONQo7kJPif#lX3@q1y!vb#rlgH`>B`2P9;ecrD;d8wob1hLR!`E`IrK|IS~Ce7&JGg!?qF6CmS&@mS)g;=5cEXOpieLKE!Fc@r%Ltbgk z9}3vX_krgPTWGNy2)+VNclNY+y5siOjj$0mK*JVVtSLPD4GzJ0!`{`OLF9)+m&|U3 z>72hDJy?G|8^4qCi+(UDR;XZ&7CN&0!05-xKR6a}I@lyOjf9l1AHCpg!k?f7v1W+1 z7|(R_Bu#9p&ggZcd8^;f4}UPvUbqzi~VYF1xq~=(mvF6p5FqUt&71IX86rRc>DM zD+R8*IoY2FeURu0t5>X@6tEOrV6&jO^i5}_tY86#z{gB+ z6wOUoD`@N6x<^5$y?+9HWUYAQm%rGsf~K(nJU4=TjC>r;OL0tRnLhfyR!AGeZos^Z zH1jo`{v3b;DC99%2*JeitJ*sI1{?t^@9S-#(|xc2bpCzV4TnGhK7kc*4=Ai@6?_XQ zx_K2qr*DE)a3>fYA3~IueT|Q;V)=eA+zY?M2k<4>m^PUAehi9YL@$EvV7WhlWhtE3 zUxg>&F_?sk7PVl-1f>f)Y9!dgwyu$2q!hpw)nT2qr4(QgPP0-v#R8z$bwZI9b~#w# zeQ?+`9F2gnQrd%@E2uUCmT6uS94AT(idNEwQD}WLFPF28IREF9c^1IO&+Ce3UUHmt zJ{6`@{5@d9>Vsuew4`EfBnJ!dv6-MSh0%2WQ;tJm1$$r@*n-7YBCS6S@zH!4Y~hE& z>-K-PZn=HI3&k$LQZPDxhN1`@H7ocgtOorzueZU*D;j0$*LGff3+A%~HiM1o{gIik zzJCPzxDzT`QnAd)icR8(tyXTnZ~xE@^I)7b=Qx&|!Wof@Y*Z=y87sxH+;rXuwnFpa z6lu)A+$`TbqI}HD=!qJT)1pQ9dELI!uEcvT_)p&6 Date: Wed, 19 Nov 2014 12:26:49 +0800 Subject: [PATCH 04/19] no message --- .../Project4/NoteBook/MainViewController.m" | 3 +++ 1 file changed, 3 insertions(+) diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/MainViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/MainViewController.m" index 58d88a6e..11094eb4 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/MainViewController.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/MainViewController.m" @@ -60,6 +60,9 @@ - (UITableViewCell *)tableView:(UITableView *)tableView else if(note.type == PicNote) { cell.textLabel.text = @"[图片]"; } + else if(note.type == DrawNote) { + cell.textLabel.text = @"[文字]"; + } else { cell.textLabel.text = note.content; } From 5e2471c37f798c89eff87ea80f1cd0566d5173c7 Mon Sep 17 00:00:00 2001 From: varvelworld Date: Wed, 19 Nov 2014 19:34:42 +0800 Subject: [PATCH 05/19] no message --- .../Project4/NoteBook/Base.lproj/Main.storyboard" | 11 +++++++++++ .../Project4/NoteBook/DrawNoteDetailViewController.m" | 1 + .../Project4/NoteBook/MainViewController.m" | 2 +- .../Project4/NoteBook/NoteDAO.m" | 2 +- 4 files changed, 14 insertions(+), 2 deletions(-) diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Base.lproj/Main.storyboard" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Base.lproj/Main.storyboard" index be9a91dc..1bc0f4f3 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Base.lproj/Main.storyboard" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/Base.lproj/Main.storyboard" @@ -15,6 +15,14 @@ + + + @@ -97,6 +105,9 @@ + + + diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/DrawNoteDetailViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/DrawNoteDetailViewController.m" index 787349bc..0c951192 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/DrawNoteDetailViewController.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/DrawNoteDetailViewController.m" @@ -29,5 +29,6 @@ - (void)didReceiveMemoryWarning { - (IBAction)modifyDrawNote:(id)sender { [self.drawBoardView writeToFile:self.noteEntity.content]; + [self.navigationController popViewControllerAnimated:YES]; } @end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/MainViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/MainViewController.m" index 11094eb4..e4e515b7 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/MainViewController.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/MainViewController.m" @@ -61,7 +61,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cell.textLabel.text = @"[图片]"; } else if(note.type == DrawNote) { - cell.textLabel.text = @"[文字]"; + cell.textLabel.text = @"[涂鸦]"; } else { cell.textLabel.text = note.content; diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteDAO.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteDAO.m" index 579e56b2..c8a364b8 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteDAO.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/Project4/NoteBook/NoteDAO.m" @@ -105,7 +105,7 @@ -(NSMutableArray*) queryNoteByOffset:(NSInteger) offset andLength:(NSInteger) le } -(NoteEntity*) loadNoteByOffset:(NSInteger) offset { - char *sql = "select id, type, content from tb_note order by id limit 1 offset ?"; + char *sql = "select id, type, content from tb_note order by id desc limit 1 offset ?"; sqlite3_stmt *statement; if(sqlite3_prepare_v2([SQLiteHelper getDBHandle], sql, -1, &statement, NULL)!=SQLITE_OK) { NSLog(@"query sql prepare failed"); From 6f4e3387222eb2df30bce640e7f6741fa454269b Mon Sep 17 00:00:00 2001 From: varvelworld Date: Mon, 1 Dec 2014 13:03:31 +0800 Subject: [PATCH 06/19] init iHabit --- .../iHabit/.gitignore" | 70 +++ .../iHabit/iHabit.xcodeproj/project.pbxproj" | 429 ++++++++++++++++++ .../contents.xcworkspacedata" | 7 + .../iHabit/iHabit/AppDelegate.h" | 17 + .../iHabit/iHabit/AppDelegate.m" | 45 ++ .../iHabit/Base.lproj/LaunchScreen.xib" | 41 ++ .../iHabit/iHabit/Base.lproj/Main.storyboard" | 25 + .../AppIcon.appiconset/Contents.json" | 68 +++ .../iHabit/iHabit/Info.plist" | 47 ++ .../iHabit/iHabit/ViewController.h" | 15 + .../iHabit/iHabit/ViewController.m" | 27 ++ .../iHabit/iHabit/main.m" | 16 + .../iHabit/iHabitTests/Info.plist" | 24 + .../iHabit/iHabitTests/iHabitTests.m" | 40 ++ 14 files changed, 871 insertions(+) create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/.gitignore" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit.xcodeproj/project.pbxproj" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit.xcodeproj/project.xcworkspace/contents.xcworkspacedata" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AppDelegate.h" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AppDelegate.m" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Base.lproj/LaunchScreen.xib" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Base.lproj/Main.storyboard" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/AppIcon.appiconset/Contents.json" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Info.plist" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/ViewController.h" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/ViewController.m" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/main.m" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabitTests/Info.plist" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabitTests/iHabitTests.m" diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/.gitignore" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/.gitignore" new file mode 100644 index 00000000..f5b5a9c5 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/.gitignore" @@ -0,0 +1,70 @@ +# Created by https://www.gitignore.io + +### OSX ### +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear on external disk +.Spotlight-V100 +.Trashes + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + + +### Xcode ### +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.xcuserstate + + +### Objective-C ### +# Xcode +# +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.hmap +*.ipa +*.xcuserstate + +# CocoaPods +# +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control +# +# Pods/ + diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit.xcodeproj/project.pbxproj" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit.xcodeproj/project.pbxproj" new file mode 100644 index 00000000..55cdaecc --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit.xcodeproj/project.pbxproj" @@ -0,0 +1,429 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + EC55A28F1A2C2D3E00488D4C /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = EC55A28E1A2C2D3E00488D4C /* main.m */; }; + EC55A2921A2C2D3E00488D4C /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = EC55A2911A2C2D3E00488D4C /* AppDelegate.m */; }; + EC55A2951A2C2D3E00488D4C /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EC55A2941A2C2D3E00488D4C /* ViewController.m */; }; + EC55A2981A2C2D3E00488D4C /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = EC55A2961A2C2D3E00488D4C /* Main.storyboard */; }; + EC55A29A1A2C2D3E00488D4C /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EC55A2991A2C2D3E00488D4C /* Images.xcassets */; }; + EC55A29D1A2C2D3E00488D4C /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = EC55A29B1A2C2D3E00488D4C /* LaunchScreen.xib */; }; + EC55A2A91A2C2D3E00488D4C /* iHabitTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EC55A2A81A2C2D3E00488D4C /* iHabitTests.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + EC55A2A31A2C2D3E00488D4C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = EC55A2811A2C2D3E00488D4C /* Project object */; + proxyType = 1; + remoteGlobalIDString = EC55A2881A2C2D3E00488D4C; + remoteInfo = iHabit; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + EC55A2891A2C2D3E00488D4C /* iHabit.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iHabit.app; sourceTree = BUILT_PRODUCTS_DIR; }; + EC55A28D1A2C2D3E00488D4C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + EC55A28E1A2C2D3E00488D4C /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + EC55A2901A2C2D3E00488D4C /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + EC55A2911A2C2D3E00488D4C /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + EC55A2931A2C2D3E00488D4C /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; + EC55A2941A2C2D3E00488D4C /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; + EC55A2971A2C2D3E00488D4C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + EC55A2991A2C2D3E00488D4C /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; + EC55A29C1A2C2D3E00488D4C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; + EC55A2A21A2C2D3E00488D4C /* iHabitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = iHabitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + EC55A2A71A2C2D3E00488D4C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + EC55A2A81A2C2D3E00488D4C /* iHabitTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = iHabitTests.m; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + EC55A2861A2C2D3E00488D4C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EC55A29F1A2C2D3E00488D4C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + EC55A2801A2C2D3E00488D4C = { + isa = PBXGroup; + children = ( + EC55A28B1A2C2D3E00488D4C /* iHabit */, + EC55A2A51A2C2D3E00488D4C /* iHabitTests */, + EC55A28A1A2C2D3E00488D4C /* Products */, + ); + sourceTree = ""; + }; + EC55A28A1A2C2D3E00488D4C /* Products */ = { + isa = PBXGroup; + children = ( + EC55A2891A2C2D3E00488D4C /* iHabit.app */, + EC55A2A21A2C2D3E00488D4C /* iHabitTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + EC55A28B1A2C2D3E00488D4C /* iHabit */ = { + isa = PBXGroup; + children = ( + EC55A2901A2C2D3E00488D4C /* AppDelegate.h */, + EC55A2911A2C2D3E00488D4C /* AppDelegate.m */, + EC55A2931A2C2D3E00488D4C /* ViewController.h */, + EC55A2941A2C2D3E00488D4C /* ViewController.m */, + EC55A2961A2C2D3E00488D4C /* Main.storyboard */, + EC55A2991A2C2D3E00488D4C /* Images.xcassets */, + EC55A29B1A2C2D3E00488D4C /* LaunchScreen.xib */, + EC55A28C1A2C2D3E00488D4C /* Supporting Files */, + ); + path = iHabit; + sourceTree = ""; + }; + EC55A28C1A2C2D3E00488D4C /* Supporting Files */ = { + isa = PBXGroup; + children = ( + EC55A28D1A2C2D3E00488D4C /* Info.plist */, + EC55A28E1A2C2D3E00488D4C /* main.m */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + EC55A2A51A2C2D3E00488D4C /* iHabitTests */ = { + isa = PBXGroup; + children = ( + EC55A2A81A2C2D3E00488D4C /* iHabitTests.m */, + EC55A2A61A2C2D3E00488D4C /* Supporting Files */, + ); + path = iHabitTests; + sourceTree = ""; + }; + EC55A2A61A2C2D3E00488D4C /* Supporting Files */ = { + isa = PBXGroup; + children = ( + EC55A2A71A2C2D3E00488D4C /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + EC55A2881A2C2D3E00488D4C /* iHabit */ = { + isa = PBXNativeTarget; + buildConfigurationList = EC55A2AC1A2C2D3E00488D4C /* Build configuration list for PBXNativeTarget "iHabit" */; + buildPhases = ( + EC55A2851A2C2D3E00488D4C /* Sources */, + EC55A2861A2C2D3E00488D4C /* Frameworks */, + EC55A2871A2C2D3E00488D4C /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = iHabit; + productName = iHabit; + productReference = EC55A2891A2C2D3E00488D4C /* iHabit.app */; + productType = "com.apple.product-type.application"; + }; + EC55A2A11A2C2D3E00488D4C /* iHabitTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = EC55A2AF1A2C2D3E00488D4C /* Build configuration list for PBXNativeTarget "iHabitTests" */; + buildPhases = ( + EC55A29E1A2C2D3E00488D4C /* Sources */, + EC55A29F1A2C2D3E00488D4C /* Frameworks */, + EC55A2A01A2C2D3E00488D4C /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + EC55A2A41A2C2D3E00488D4C /* PBXTargetDependency */, + ); + name = iHabitTests; + productName = iHabitTests; + productReference = EC55A2A21A2C2D3E00488D4C /* iHabitTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + EC55A2811A2C2D3E00488D4C /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0610; + ORGANIZATIONNAME = lzh; + TargetAttributes = { + EC55A2881A2C2D3E00488D4C = { + CreatedOnToolsVersion = 6.1; + }; + EC55A2A11A2C2D3E00488D4C = { + CreatedOnToolsVersion = 6.1; + TestTargetID = EC55A2881A2C2D3E00488D4C; + }; + }; + }; + buildConfigurationList = EC55A2841A2C2D3E00488D4C /* Build configuration list for PBXProject "iHabit" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = EC55A2801A2C2D3E00488D4C; + productRefGroup = EC55A28A1A2C2D3E00488D4C /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + EC55A2881A2C2D3E00488D4C /* iHabit */, + EC55A2A11A2C2D3E00488D4C /* iHabitTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + EC55A2871A2C2D3E00488D4C /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EC55A2981A2C2D3E00488D4C /* Main.storyboard in Resources */, + EC55A29D1A2C2D3E00488D4C /* LaunchScreen.xib in Resources */, + EC55A29A1A2C2D3E00488D4C /* Images.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EC55A2A01A2C2D3E00488D4C /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + EC55A2851A2C2D3E00488D4C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EC55A2951A2C2D3E00488D4C /* ViewController.m in Sources */, + EC55A2921A2C2D3E00488D4C /* AppDelegate.m in Sources */, + EC55A28F1A2C2D3E00488D4C /* main.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EC55A29E1A2C2D3E00488D4C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EC55A2A91A2C2D3E00488D4C /* iHabitTests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + EC55A2A41A2C2D3E00488D4C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = EC55A2881A2C2D3E00488D4C /* iHabit */; + targetProxy = EC55A2A31A2C2D3E00488D4C /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + EC55A2961A2C2D3E00488D4C /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + EC55A2971A2C2D3E00488D4C /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + EC55A29B1A2C2D3E00488D4C /* LaunchScreen.xib */ = { + isa = PBXVariantGroup; + children = ( + EC55A29C1A2C2D3E00488D4C /* Base */, + ); + name = LaunchScreen.xib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + EC55A2AA1A2C2D3E00488D4C /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.1; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + EC55A2AB1A2C2D3E00488D4C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.1; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + EC55A2AD1A2C2D3E00488D4C /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_FILE = iHabit/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + EC55A2AE1A2C2D3E00488D4C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_FILE = iHabit/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; + EC55A2B01A2C2D3E00488D4C /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = iHabitTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/iHabit.app/iHabit"; + }; + name = Debug; + }; + EC55A2B11A2C2D3E00488D4C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + INFOPLIST_FILE = iHabitTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/iHabit.app/iHabit"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + EC55A2841A2C2D3E00488D4C /* Build configuration list for PBXProject "iHabit" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EC55A2AA1A2C2D3E00488D4C /* Debug */, + EC55A2AB1A2C2D3E00488D4C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + EC55A2AC1A2C2D3E00488D4C /* Build configuration list for PBXNativeTarget "iHabit" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EC55A2AD1A2C2D3E00488D4C /* Debug */, + EC55A2AE1A2C2D3E00488D4C /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; + EC55A2AF1A2C2D3E00488D4C /* Build configuration list for PBXNativeTarget "iHabitTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EC55A2B01A2C2D3E00488D4C /* Debug */, + EC55A2B11A2C2D3E00488D4C /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; +/* End XCConfigurationList section */ + }; + rootObject = EC55A2811A2C2D3E00488D4C /* Project object */; +} diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit.xcodeproj/project.xcworkspace/contents.xcworkspacedata" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit.xcodeproj/project.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 00000000..43a82e5f --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit.xcodeproj/project.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,7 @@ + + + + + diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AppDelegate.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AppDelegate.h" new file mode 100644 index 00000000..b05ab98f --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AppDelegate.h" @@ -0,0 +1,17 @@ +// +// AppDelegate.h +// iHabit +// +// Created by 陆钟豪 on 14/12/1. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import + +@interface AppDelegate : UIResponder + +@property (strong, nonatomic) UIWindow *window; + + +@end + diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AppDelegate.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AppDelegate.m" new file mode 100644 index 00000000..b1b3de5f --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AppDelegate.m" @@ -0,0 +1,45 @@ +// +// AppDelegate.m +// iHabit +// +// Created by 陆钟豪 on 14/12/1. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import "AppDelegate.h" + +@interface AppDelegate () + +@end + +@implementation AppDelegate + + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + // Override point for customization after application launch. + return YES; +} + +- (void)applicationWillResignActive:(UIApplication *)application { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. +} + +- (void)applicationDidEnterBackground:(UIApplication *)application { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. +} + +- (void)applicationWillEnterForeground:(UIApplication *)application { + // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. +} + +- (void)applicationDidBecomeActive:(UIApplication *)application { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. +} + +- (void)applicationWillTerminate:(UIApplication *)application { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. +} + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Base.lproj/LaunchScreen.xib" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Base.lproj/LaunchScreen.xib" new file mode 100644 index 00000000..683d0930 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Base.lproj/LaunchScreen.xib" @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Base.lproj/Main.storyboard" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Base.lproj/Main.storyboard" new file mode 100644 index 00000000..f56d2f3b --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Base.lproj/Main.storyboard" @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/AppIcon.appiconset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/AppIcon.appiconset/Contents.json" new file mode 100644 index 00000000..36d2c80d --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/AppIcon.appiconset/Contents.json" @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Info.plist" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Info.plist" new file mode 100644 index 00000000..b84c2864 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Info.plist" @@ -0,0 +1,47 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + cstlab.lzh.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/ViewController.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/ViewController.h" new file mode 100644 index 00000000..c686a108 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/ViewController.h" @@ -0,0 +1,15 @@ +// +// ViewController.h +// iHabit +// +// Created by 陆钟豪 on 14/12/1. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import + +@interface ViewController : UIViewController + + +@end + diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/ViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/ViewController.m" new file mode 100644 index 00000000..5f3d140a --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/ViewController.m" @@ -0,0 +1,27 @@ +// +// ViewController.m +// iHabit +// +// Created by 陆钟豪 on 14/12/1. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import "ViewController.h" + +@interface ViewController () + +@end + +@implementation ViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view, typically from a nib. +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/main.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/main.m" new file mode 100644 index 00000000..31d82037 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/main.m" @@ -0,0 +1,16 @@ +// +// main.m +// iHabit +// +// Created by 陆钟豪 on 14/12/1. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabitTests/Info.plist" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabitTests/Info.plist" new file mode 100644 index 00000000..dd0bff1c --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabitTests/Info.plist" @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + cstlab.lzh.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabitTests/iHabitTests.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabitTests/iHabitTests.m" new file mode 100644 index 00000000..78ad1deb --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabitTests/iHabitTests.m" @@ -0,0 +1,40 @@ +// +// iHabitTests.m +// iHabitTests +// +// Created by 陆钟豪 on 14/12/1. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import +#import + +@interface iHabitTests : XCTestCase + +@end + +@implementation iHabitTests + +- (void)setUp { + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; +} + +- (void)testExample { + // This is an example of a functional test case. + XCTAssert(YES, @"Pass"); +} + +- (void)testPerformanceExample { + // This is an example of a performance test case. + [self measureBlock:^{ + // Put the code you want to measure the time of here. + }]; +} + +@end From 43d34c4b83ab6799ac3ef0a44a2f76a6fded7586 Mon Sep 17 00:00:00 2001 From: varvelworld Date: Wed, 3 Dec 2014 15:00:08 +0800 Subject: [PATCH 07/19] add pods --- .../iHabit/.gitignore" | 2 +- .../iHabit/Podfile" | 11 + .../iHabit/Podfile.lock" | 12 + .../iHabit/iHabit.xcodeproj/project.pbxproj" | 1680 ++++++++++++----- .../contents.xcworkspacedata" | 10 + .../iHabit/iHabit/AppDelegate.m" | 3 + .../iHabit/iHabit/Base.lproj/Main.storyboard" | 6 +- .../iHabit/iHabit/Habit.h" | 25 + .../iHabit/iHabit/Habit.m" | 24 + .../iHabit/iHabit/HistoryAction.h" | 19 + .../iHabit/iHabit/HistoryAction.m" | 18 + .../iHabit/iHabit/HistoryPeriod.h" | 21 + .../iHabit/iHabit/HistoryPeriod.m" | 20 + .../iHabitDB.xcdatamodel/contents" | 31 + .../iHabit/iHabitTests/iHabitTests.m" | 10 +- 15 files changed, 1458 insertions(+), 434 deletions(-) create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/Podfile" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/Podfile.lock" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit.xcworkspace/contents.xcworkspacedata" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Habit.h" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Habit.m" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HistoryAction.h" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HistoryAction.m" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HistoryPeriod.h" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HistoryPeriod.m" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/iHabitDB.xcdatamodeld/iHabitDB.xcdatamodel/contents" diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/.gitignore" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/.gitignore" index f5b5a9c5..5702fd75 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/.gitignore" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/.gitignore" @@ -66,5 +66,5 @@ DerivedData # you should judge for yourself, the pros and cons are mentioned at: # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control # -# Pods/ +Pods/ diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/Podfile" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/Podfile" new file mode 100644 index 00000000..638e6575 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/Podfile" @@ -0,0 +1,11 @@ +source 'https://github.com/CocoaPods/Specs.git' + +target 'iHabit' do + pod 'MagicalRecord', '~> 2.2' +end + +target 'iHabitTests' do + pod 'MagicalRecord', '~> 2.2' +end + + diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/Podfile.lock" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/Podfile.lock" new file mode 100644 index 00000000..31a2df0b --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/Podfile.lock" @@ -0,0 +1,12 @@ +PODS: + - MagicalRecord (2.2): + - MagicalRecord/Core (= 2.2) + - MagicalRecord/Core (2.2) + +DEPENDENCIES: + - MagicalRecord (~> 2.2) + +SPEC CHECKSUMS: + MagicalRecord: 2b471584fc9e3137f3d0a56967917baa4979e224 + +COCOAPODS: 0.35.0 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit.xcodeproj/project.pbxproj" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit.xcodeproj/project.pbxproj" index 55cdaecc..a480c4f8 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit.xcodeproj/project.pbxproj" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit.xcodeproj/project.pbxproj" @@ -1,429 +1,1251 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - EC55A28F1A2C2D3E00488D4C /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = EC55A28E1A2C2D3E00488D4C /* main.m */; }; - EC55A2921A2C2D3E00488D4C /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = EC55A2911A2C2D3E00488D4C /* AppDelegate.m */; }; - EC55A2951A2C2D3E00488D4C /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EC55A2941A2C2D3E00488D4C /* ViewController.m */; }; - EC55A2981A2C2D3E00488D4C /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = EC55A2961A2C2D3E00488D4C /* Main.storyboard */; }; - EC55A29A1A2C2D3E00488D4C /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EC55A2991A2C2D3E00488D4C /* Images.xcassets */; }; - EC55A29D1A2C2D3E00488D4C /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = EC55A29B1A2C2D3E00488D4C /* LaunchScreen.xib */; }; - EC55A2A91A2C2D3E00488D4C /* iHabitTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EC55A2A81A2C2D3E00488D4C /* iHabitTests.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - EC55A2A31A2C2D3E00488D4C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = EC55A2811A2C2D3E00488D4C /* Project object */; - proxyType = 1; - remoteGlobalIDString = EC55A2881A2C2D3E00488D4C; - remoteInfo = iHabit; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - EC55A2891A2C2D3E00488D4C /* iHabit.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iHabit.app; sourceTree = BUILT_PRODUCTS_DIR; }; - EC55A28D1A2C2D3E00488D4C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - EC55A28E1A2C2D3E00488D4C /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - EC55A2901A2C2D3E00488D4C /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; - EC55A2911A2C2D3E00488D4C /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - EC55A2931A2C2D3E00488D4C /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; - EC55A2941A2C2D3E00488D4C /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; - EC55A2971A2C2D3E00488D4C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - EC55A2991A2C2D3E00488D4C /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; - EC55A29C1A2C2D3E00488D4C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; - EC55A2A21A2C2D3E00488D4C /* iHabitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = iHabitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - EC55A2A71A2C2D3E00488D4C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - EC55A2A81A2C2D3E00488D4C /* iHabitTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = iHabitTests.m; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - EC55A2861A2C2D3E00488D4C /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - EC55A29F1A2C2D3E00488D4C /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - EC55A2801A2C2D3E00488D4C = { - isa = PBXGroup; - children = ( - EC55A28B1A2C2D3E00488D4C /* iHabit */, - EC55A2A51A2C2D3E00488D4C /* iHabitTests */, - EC55A28A1A2C2D3E00488D4C /* Products */, - ); - sourceTree = ""; - }; - EC55A28A1A2C2D3E00488D4C /* Products */ = { - isa = PBXGroup; - children = ( - EC55A2891A2C2D3E00488D4C /* iHabit.app */, - EC55A2A21A2C2D3E00488D4C /* iHabitTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - EC55A28B1A2C2D3E00488D4C /* iHabit */ = { - isa = PBXGroup; - children = ( - EC55A2901A2C2D3E00488D4C /* AppDelegate.h */, - EC55A2911A2C2D3E00488D4C /* AppDelegate.m */, - EC55A2931A2C2D3E00488D4C /* ViewController.h */, - EC55A2941A2C2D3E00488D4C /* ViewController.m */, - EC55A2961A2C2D3E00488D4C /* Main.storyboard */, - EC55A2991A2C2D3E00488D4C /* Images.xcassets */, - EC55A29B1A2C2D3E00488D4C /* LaunchScreen.xib */, - EC55A28C1A2C2D3E00488D4C /* Supporting Files */, - ); - path = iHabit; - sourceTree = ""; - }; - EC55A28C1A2C2D3E00488D4C /* Supporting Files */ = { - isa = PBXGroup; - children = ( - EC55A28D1A2C2D3E00488D4C /* Info.plist */, - EC55A28E1A2C2D3E00488D4C /* main.m */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - EC55A2A51A2C2D3E00488D4C /* iHabitTests */ = { - isa = PBXGroup; - children = ( - EC55A2A81A2C2D3E00488D4C /* iHabitTests.m */, - EC55A2A61A2C2D3E00488D4C /* Supporting Files */, - ); - path = iHabitTests; - sourceTree = ""; - }; - EC55A2A61A2C2D3E00488D4C /* Supporting Files */ = { - isa = PBXGroup; - children = ( - EC55A2A71A2C2D3E00488D4C /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - EC55A2881A2C2D3E00488D4C /* iHabit */ = { - isa = PBXNativeTarget; - buildConfigurationList = EC55A2AC1A2C2D3E00488D4C /* Build configuration list for PBXNativeTarget "iHabit" */; - buildPhases = ( - EC55A2851A2C2D3E00488D4C /* Sources */, - EC55A2861A2C2D3E00488D4C /* Frameworks */, - EC55A2871A2C2D3E00488D4C /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = iHabit; - productName = iHabit; - productReference = EC55A2891A2C2D3E00488D4C /* iHabit.app */; - productType = "com.apple.product-type.application"; - }; - EC55A2A11A2C2D3E00488D4C /* iHabitTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = EC55A2AF1A2C2D3E00488D4C /* Build configuration list for PBXNativeTarget "iHabitTests" */; - buildPhases = ( - EC55A29E1A2C2D3E00488D4C /* Sources */, - EC55A29F1A2C2D3E00488D4C /* Frameworks */, - EC55A2A01A2C2D3E00488D4C /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - EC55A2A41A2C2D3E00488D4C /* PBXTargetDependency */, - ); - name = iHabitTests; - productName = iHabitTests; - productReference = EC55A2A21A2C2D3E00488D4C /* iHabitTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - EC55A2811A2C2D3E00488D4C /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0610; - ORGANIZATIONNAME = lzh; - TargetAttributes = { - EC55A2881A2C2D3E00488D4C = { - CreatedOnToolsVersion = 6.1; - }; - EC55A2A11A2C2D3E00488D4C = { - CreatedOnToolsVersion = 6.1; - TestTargetID = EC55A2881A2C2D3E00488D4C; - }; - }; - }; - buildConfigurationList = EC55A2841A2C2D3E00488D4C /* Build configuration list for PBXProject "iHabit" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = EC55A2801A2C2D3E00488D4C; - productRefGroup = EC55A28A1A2C2D3E00488D4C /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - EC55A2881A2C2D3E00488D4C /* iHabit */, - EC55A2A11A2C2D3E00488D4C /* iHabitTests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - EC55A2871A2C2D3E00488D4C /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - EC55A2981A2C2D3E00488D4C /* Main.storyboard in Resources */, - EC55A29D1A2C2D3E00488D4C /* LaunchScreen.xib in Resources */, - EC55A29A1A2C2D3E00488D4C /* Images.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - EC55A2A01A2C2D3E00488D4C /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - EC55A2851A2C2D3E00488D4C /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - EC55A2951A2C2D3E00488D4C /* ViewController.m in Sources */, - EC55A2921A2C2D3E00488D4C /* AppDelegate.m in Sources */, - EC55A28F1A2C2D3E00488D4C /* main.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - EC55A29E1A2C2D3E00488D4C /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - EC55A2A91A2C2D3E00488D4C /* iHabitTests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - EC55A2A41A2C2D3E00488D4C /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = EC55A2881A2C2D3E00488D4C /* iHabit */; - targetProxy = EC55A2A31A2C2D3E00488D4C /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - EC55A2961A2C2D3E00488D4C /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - EC55A2971A2C2D3E00488D4C /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - EC55A29B1A2C2D3E00488D4C /* LaunchScreen.xib */ = { - isa = PBXVariantGroup; - children = ( - EC55A29C1A2C2D3E00488D4C /* Base */, - ); - name = LaunchScreen.xib; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - EC55A2AA1A2C2D3E00488D4C /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.1; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - EC55A2AB1A2C2D3E00488D4C /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.1; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - EC55A2AD1A2C2D3E00488D4C /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - INFOPLIST_FILE = iHabit/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Debug; - }; - EC55A2AE1A2C2D3E00488D4C /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - INFOPLIST_FILE = iHabit/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; - EC55A2B01A2C2D3E00488D4C /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = iHabitTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/iHabit.app/iHabit"; - }; - name = Debug; - }; - EC55A2B11A2C2D3E00488D4C /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - INFOPLIST_FILE = iHabitTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/iHabit.app/iHabit"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - EC55A2841A2C2D3E00488D4C /* Build configuration list for PBXProject "iHabit" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - EC55A2AA1A2C2D3E00488D4C /* Debug */, - EC55A2AB1A2C2D3E00488D4C /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - EC55A2AC1A2C2D3E00488D4C /* Build configuration list for PBXNativeTarget "iHabit" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - EC55A2AD1A2C2D3E00488D4C /* Debug */, - EC55A2AE1A2C2D3E00488D4C /* Release */, - ); - defaultConfigurationIsVisible = 0; - }; - EC55A2AF1A2C2D3E00488D4C /* Build configuration list for PBXNativeTarget "iHabitTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - EC55A2B01A2C2D3E00488D4C /* Debug */, - EC55A2B11A2C2D3E00488D4C /* Release */, - ); - defaultConfigurationIsVisible = 0; - }; -/* End XCConfigurationList section */ - }; - rootObject = EC55A2811A2C2D3E00488D4C /* Project object */; -} + + + + + archiveVersion + 1 + classes + + objectVersion + 46 + objects + + 12706CB5999595FF76321234 + + buildActionMask + 2147483647 + files + + inputPaths + + isa + PBXShellScriptBuildPhase + name + Copy Pods Resources + outputPaths + + runOnlyForDeploymentPostprocessing + 0 + shellPath + /bin/sh + shellScript + "${SRCROOT}/Pods/Target Support Files/Pods-iHabit/Pods-iHabit-resources.sh" + + showEnvVarsInLog + 0 + + 459DD1A24354887D9EE47FAB + + children + + 74883FFA65CCAA515622A0F1 + 60C7E73AA0F2F43CD917A9E6 + D12863C1136CBB00C1307621 + 5780C07F6DD8995732F7D1FF + + isa + PBXGroup + name + Pods + sourceTree + <group> + + 4999720AA74C0E5AD0D5903C + + explicitFileType + archive.ar + includeInIndex + 0 + isa + PBXFileReference + path + libPods-iHabit.a + sourceTree + BUILT_PRODUCTS_DIR + + 4BBC0F4413DC9B9C8D5D144C + + fileRef + 4999720AA74C0E5AD0D5903C + isa + PBXBuildFile + + 5780C07F6DD8995732F7D1FF + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + name + Pods-iHabitTests.release.xcconfig + path + Pods/Target Support Files/Pods-iHabitTests/Pods-iHabitTests.release.xcconfig + sourceTree + <group> + + 5D8688A2CF83CF37104E9575 + + buildActionMask + 2147483647 + files + + inputPaths + + isa + PBXShellScriptBuildPhase + name + Check Pods Manifest.lock + outputPaths + + runOnlyForDeploymentPostprocessing + 0 + shellPath + /bin/sh + shellScript + diff "${PODS_ROOT}/../Podfile.lock" "${PODS_ROOT}/Manifest.lock" > /dev/null +if [[ $? != 0 ]] ; then + cat << EOM +error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation. +EOM + exit 1 +fi + + showEnvVarsInLog + 0 + + 60C7E73AA0F2F43CD917A9E6 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + name + Pods-iHabit.release.xcconfig + path + Pods/Target Support Files/Pods-iHabit/Pods-iHabit.release.xcconfig + sourceTree + <group> + + 63ED9AE7BF250DF690224151 + + buildActionMask + 2147483647 + files + + inputPaths + + isa + PBXShellScriptBuildPhase + name + Check Pods Manifest.lock + outputPaths + + runOnlyForDeploymentPostprocessing + 0 + shellPath + /bin/sh + shellScript + diff "${PODS_ROOT}/../Podfile.lock" "${PODS_ROOT}/Manifest.lock" > /dev/null +if [[ $? != 0 ]] ; then + cat << EOM +error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation. +EOM + exit 1 +fi + + showEnvVarsInLog + 0 + + 74883FFA65CCAA515622A0F1 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + name + Pods-iHabit.debug.xcconfig + path + Pods/Target Support Files/Pods-iHabit/Pods-iHabit.debug.xcconfig + sourceTree + <group> + + 96A42CF94F461F5F5B9D86EC + + fileRef + FE5D40FCFC579DA59F6D2237 + isa + PBXBuildFile + + D12863C1136CBB00C1307621 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + name + Pods-iHabitTests.debug.xcconfig + path + Pods/Target Support Files/Pods-iHabitTests/Pods-iHabitTests.debug.xcconfig + sourceTree + <group> + + D19B6EFFC9FECB9B00BE0BD4 + + buildActionMask + 2147483647 + files + + inputPaths + + isa + PBXShellScriptBuildPhase + name + Copy Pods Resources + outputPaths + + runOnlyForDeploymentPostprocessing + 0 + shellPath + /bin/sh + shellScript + "${SRCROOT}/Pods/Target Support Files/Pods-iHabitTests/Pods-iHabitTests-resources.sh" + + showEnvVarsInLog + 0 + + EC4C42E41A2EDAEA00A82D8D + + children + + EC4C42E51A2EDAEA00A82D8D + + currentVersion + EC4C42E51A2EDAEA00A82D8D + isa + XCVersionGroup + path + iHabitDB.xcdatamodeld + sourceTree + <group> + versionGroupType + wrapper.xcdatamodel + + EC4C42E51A2EDAEA00A82D8D + + isa + PBXFileReference + lastKnownFileType + wrapper.xcdatamodel + path + iHabitDB.xcdatamodel + sourceTree + <group> + + EC4C42E61A2EDAEA00A82D8D + + fileRef + EC4C42E41A2EDAEA00A82D8D + isa + PBXBuildFile + + EC4C42E71A2EDAEA00A82D8D + + fileRef + EC4C42E41A2EDAEA00A82D8D + isa + PBXBuildFile + + EC4C42E81A2EE35700A82D8D + + fileEncoding + 4 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + HistoryPeriod.h + sourceTree + <group> + + EC4C42E91A2EE35700A82D8D + + fileEncoding + 4 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + HistoryPeriod.m + sourceTree + <group> + + EC4C42EA1A2EE35700A82D8D + + fileRef + EC4C42E91A2EE35700A82D8D + isa + PBXBuildFile + + EC4C42EB1A2EE35700A82D8D + + fileRef + EC4C42E91A2EE35700A82D8D + isa + PBXBuildFile + + EC4C42EC1A2EE35800A82D8D + + fileEncoding + 4 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + HistoryAction.h + sourceTree + <group> + + EC4C42ED1A2EE35800A82D8D + + fileEncoding + 4 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + HistoryAction.m + sourceTree + <group> + + EC4C42EE1A2EE35800A82D8D + + fileRef + EC4C42ED1A2EE35800A82D8D + isa + PBXBuildFile + + EC4C42EF1A2EE35800A82D8D + + fileRef + EC4C42ED1A2EE35800A82D8D + isa + PBXBuildFile + + EC4C42F01A2EE35800A82D8D + + fileEncoding + 4 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + Habit.h + sourceTree + <group> + + EC4C42F11A2EE35800A82D8D + + fileEncoding + 4 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + Habit.m + sourceTree + <group> + + EC4C42F21A2EE35800A82D8D + + fileRef + EC4C42F11A2EE35800A82D8D + isa + PBXBuildFile + + EC4C42F31A2EE35800A82D8D + + fileRef + EC4C42F11A2EE35800A82D8D + isa + PBXBuildFile + + EC55A2801A2C2D3E00488D4C + + children + + EC55A28B1A2C2D3E00488D4C + EC55A2A51A2C2D3E00488D4C + EC55A28A1A2C2D3E00488D4C + 459DD1A24354887D9EE47FAB + EF4B7C91BCFB7136CCB08CE8 + + isa + PBXGroup + sourceTree + <group> + + EC55A2811A2C2D3E00488D4C + + attributes + + LastUpgradeCheck + 0610 + ORGANIZATIONNAME + lzh + TargetAttributes + + EC55A2881A2C2D3E00488D4C + + CreatedOnToolsVersion + 6.1 + + EC55A2A11A2C2D3E00488D4C + + CreatedOnToolsVersion + 6.1 + TestTargetID + EC55A2881A2C2D3E00488D4C + + + + buildConfigurationList + EC55A2841A2C2D3E00488D4C + compatibilityVersion + Xcode 3.2 + developmentRegion + English + hasScannedForEncodings + 0 + isa + PBXProject + knownRegions + + en + Base + + mainGroup + EC55A2801A2C2D3E00488D4C + productRefGroup + EC55A28A1A2C2D3E00488D4C + projectDirPath + + projectReferences + + projectRoot + + targets + + EC55A2881A2C2D3E00488D4C + EC55A2A11A2C2D3E00488D4C + + + EC55A2841A2C2D3E00488D4C + + buildConfigurations + + EC55A2AA1A2C2D3E00488D4C + EC55A2AB1A2C2D3E00488D4C + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + EC55A2851A2C2D3E00488D4C + + buildActionMask + 2147483647 + files + + EC4C42E61A2EDAEA00A82D8D + EC55A2951A2C2D3E00488D4C + EC4C42EA1A2EE35700A82D8D + EC55A2921A2C2D3E00488D4C + EC4C42EE1A2EE35800A82D8D + EC4C42F21A2EE35800A82D8D + EC55A28F1A2C2D3E00488D4C + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + EC55A2861A2C2D3E00488D4C + + buildActionMask + 2147483647 + files + + 4BBC0F4413DC9B9C8D5D144C + + isa + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + EC55A2871A2C2D3E00488D4C + + buildActionMask + 2147483647 + files + + EC55A2981A2C2D3E00488D4C + EC55A29D1A2C2D3E00488D4C + EC55A29A1A2C2D3E00488D4C + + isa + PBXResourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + EC55A2881A2C2D3E00488D4C + + buildConfigurationList + EC55A2AC1A2C2D3E00488D4C + buildPhases + + 5D8688A2CF83CF37104E9575 + EC55A2851A2C2D3E00488D4C + EC55A2861A2C2D3E00488D4C + EC55A2871A2C2D3E00488D4C + 12706CB5999595FF76321234 + + buildRules + + dependencies + + isa + PBXNativeTarget + name + iHabit + productName + iHabit + productReference + EC55A2891A2C2D3E00488D4C + productType + com.apple.product-type.application + + EC55A2891A2C2D3E00488D4C + + explicitFileType + wrapper.application + includeInIndex + 0 + isa + PBXFileReference + path + iHabit.app + sourceTree + BUILT_PRODUCTS_DIR + + EC55A28A1A2C2D3E00488D4C + + children + + EC55A2891A2C2D3E00488D4C + EC55A2A21A2C2D3E00488D4C + + isa + PBXGroup + name + Products + sourceTree + <group> + + EC55A28B1A2C2D3E00488D4C + + children + + EC55A2901A2C2D3E00488D4C + EC55A2911A2C2D3E00488D4C + EC55A2931A2C2D3E00488D4C + EC55A2941A2C2D3E00488D4C + EC55A2961A2C2D3E00488D4C + EC55A2991A2C2D3E00488D4C + EC55A29B1A2C2D3E00488D4C + EC55A28C1A2C2D3E00488D4C + EC4C42E41A2EDAEA00A82D8D + EC4C42F01A2EE35800A82D8D + EC4C42F11A2EE35800A82D8D + EC4C42EC1A2EE35800A82D8D + EC4C42ED1A2EE35800A82D8D + EC4C42E81A2EE35700A82D8D + EC4C42E91A2EE35700A82D8D + + isa + PBXGroup + path + iHabit + sourceTree + <group> + + EC55A28C1A2C2D3E00488D4C + + children + + EC55A28D1A2C2D3E00488D4C + EC55A28E1A2C2D3E00488D4C + + isa + PBXGroup + name + Supporting Files + sourceTree + <group> + + EC55A28D1A2C2D3E00488D4C + + isa + PBXFileReference + lastKnownFileType + text.plist.xml + path + Info.plist + sourceTree + <group> + + EC55A28E1A2C2D3E00488D4C + + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + main.m + sourceTree + <group> + + EC55A28F1A2C2D3E00488D4C + + fileRef + EC55A28E1A2C2D3E00488D4C + isa + PBXBuildFile + + EC55A2901A2C2D3E00488D4C + + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + AppDelegate.h + sourceTree + <group> + + EC55A2911A2C2D3E00488D4C + + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + AppDelegate.m + sourceTree + <group> + + EC55A2921A2C2D3E00488D4C + + fileRef + EC55A2911A2C2D3E00488D4C + isa + PBXBuildFile + + EC55A2931A2C2D3E00488D4C + + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + ViewController.h + sourceTree + <group> + + EC55A2941A2C2D3E00488D4C + + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + ViewController.m + sourceTree + <group> + + EC55A2951A2C2D3E00488D4C + + fileRef + EC55A2941A2C2D3E00488D4C + isa + PBXBuildFile + + EC55A2961A2C2D3E00488D4C + + children + + EC55A2971A2C2D3E00488D4C + + isa + PBXVariantGroup + name + Main.storyboard + sourceTree + <group> + + EC55A2971A2C2D3E00488D4C + + isa + PBXFileReference + lastKnownFileType + file.storyboard + name + Base + path + Base.lproj/Main.storyboard + sourceTree + <group> + + EC55A2981A2C2D3E00488D4C + + fileRef + EC55A2961A2C2D3E00488D4C + isa + PBXBuildFile + + EC55A2991A2C2D3E00488D4C + + isa + PBXFileReference + lastKnownFileType + folder.assetcatalog + path + Images.xcassets + sourceTree + <group> + + EC55A29A1A2C2D3E00488D4C + + fileRef + EC55A2991A2C2D3E00488D4C + isa + PBXBuildFile + + EC55A29B1A2C2D3E00488D4C + + children + + EC55A29C1A2C2D3E00488D4C + + isa + PBXVariantGroup + name + LaunchScreen.xib + sourceTree + <group> + + EC55A29C1A2C2D3E00488D4C + + isa + PBXFileReference + lastKnownFileType + file.xib + name + Base + path + Base.lproj/LaunchScreen.xib + sourceTree + <group> + + EC55A29D1A2C2D3E00488D4C + + fileRef + EC55A29B1A2C2D3E00488D4C + isa + PBXBuildFile + + EC55A29E1A2C2D3E00488D4C + + buildActionMask + 2147483647 + files + + EC4C42F31A2EE35800A82D8D + EC4C42E71A2EDAEA00A82D8D + EC55A2A91A2C2D3E00488D4C + EC4C42EF1A2EE35800A82D8D + EC4C42EB1A2EE35700A82D8D + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + EC55A29F1A2C2D3E00488D4C + + buildActionMask + 2147483647 + files + + 96A42CF94F461F5F5B9D86EC + + isa + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + EC55A2A01A2C2D3E00488D4C + + buildActionMask + 2147483647 + files + + isa + PBXResourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + EC55A2A11A2C2D3E00488D4C + + buildConfigurationList + EC55A2AF1A2C2D3E00488D4C + buildPhases + + 63ED9AE7BF250DF690224151 + EC55A29E1A2C2D3E00488D4C + EC55A29F1A2C2D3E00488D4C + EC55A2A01A2C2D3E00488D4C + D19B6EFFC9FECB9B00BE0BD4 + + buildRules + + dependencies + + EC55A2A41A2C2D3E00488D4C + + isa + PBXNativeTarget + name + iHabitTests + productName + iHabitTests + productReference + EC55A2A21A2C2D3E00488D4C + productType + com.apple.product-type.bundle.unit-test + + EC55A2A21A2C2D3E00488D4C + + explicitFileType + wrapper.cfbundle + includeInIndex + 0 + isa + PBXFileReference + path + iHabitTests.xctest + sourceTree + BUILT_PRODUCTS_DIR + + EC55A2A31A2C2D3E00488D4C + + containerPortal + EC55A2811A2C2D3E00488D4C + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + EC55A2881A2C2D3E00488D4C + remoteInfo + iHabit + + EC55A2A41A2C2D3E00488D4C + + isa + PBXTargetDependency + target + EC55A2881A2C2D3E00488D4C + targetProxy + EC55A2A31A2C2D3E00488D4C + + EC55A2A51A2C2D3E00488D4C + + children + + EC55A2A81A2C2D3E00488D4C + EC55A2A61A2C2D3E00488D4C + + isa + PBXGroup + path + iHabitTests + sourceTree + <group> + + EC55A2A61A2C2D3E00488D4C + + children + + EC55A2A71A2C2D3E00488D4C + + isa + PBXGroup + name + Supporting Files + sourceTree + <group> + + EC55A2A71A2C2D3E00488D4C + + isa + PBXFileReference + lastKnownFileType + text.plist.xml + path + Info.plist + sourceTree + <group> + + EC55A2A81A2C2D3E00488D4C + + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + iHabitTests.m + sourceTree + <group> + + EC55A2A91A2C2D3E00488D4C + + fileRef + EC55A2A81A2C2D3E00488D4C + isa + PBXBuildFile + + EC55A2AA1A2C2D3E00488D4C + + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + CLANG_CXX_LANGUAGE_STANDARD + gnu++0x + CLANG_CXX_LIBRARY + libc++ + CLANG_ENABLE_MODULES + YES + CLANG_ENABLE_OBJC_ARC + YES + CLANG_WARN_BOOL_CONVERSION + YES + CLANG_WARN_CONSTANT_CONVERSION + YES + CLANG_WARN_DIRECT_OBJC_ISA_USAGE + YES_ERROR + CLANG_WARN_EMPTY_BODY + YES + CLANG_WARN_ENUM_CONVERSION + YES + CLANG_WARN_INT_CONVERSION + YES + CLANG_WARN_OBJC_ROOT_CLASS + YES_ERROR + CLANG_WARN_UNREACHABLE_CODE + YES + CLANG_WARN__DUPLICATE_METHOD_MATCH + YES + CODE_SIGN_IDENTITY[sdk=iphoneos*] + iPhone Developer + COPY_PHASE_STRIP + NO + ENABLE_STRICT_OBJC_MSGSEND + YES + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_WARN_64_TO_32_BIT_CONVERSION + YES + GCC_WARN_ABOUT_RETURN_TYPE + YES_ERROR + GCC_WARN_UNDECLARED_SELECTOR + YES + GCC_WARN_UNINITIALIZED_AUTOS + YES_AGGRESSIVE + GCC_WARN_UNUSED_FUNCTION + YES + GCC_WARN_UNUSED_VARIABLE + YES + IPHONEOS_DEPLOYMENT_TARGET + 8.1 + MTL_ENABLE_DEBUG_INFO + YES + ONLY_ACTIVE_ARCH + YES + SDKROOT + iphoneos + TARGETED_DEVICE_FAMILY + 1,2 + + isa + XCBuildConfiguration + name + Debug + + EC55A2AB1A2C2D3E00488D4C + + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + CLANG_CXX_LANGUAGE_STANDARD + gnu++0x + CLANG_CXX_LIBRARY + libc++ + CLANG_ENABLE_MODULES + YES + CLANG_ENABLE_OBJC_ARC + YES + CLANG_WARN_BOOL_CONVERSION + YES + CLANG_WARN_CONSTANT_CONVERSION + YES + CLANG_WARN_DIRECT_OBJC_ISA_USAGE + YES_ERROR + CLANG_WARN_EMPTY_BODY + YES + CLANG_WARN_ENUM_CONVERSION + YES + CLANG_WARN_INT_CONVERSION + YES + CLANG_WARN_OBJC_ROOT_CLASS + YES_ERROR + CLANG_WARN_UNREACHABLE_CODE + YES + CLANG_WARN__DUPLICATE_METHOD_MATCH + YES + CODE_SIGN_IDENTITY[sdk=iphoneos*] + iPhone Developer + COPY_PHASE_STRIP + YES + ENABLE_NS_ASSERTIONS + NO + ENABLE_STRICT_OBJC_MSGSEND + YES + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_WARN_64_TO_32_BIT_CONVERSION + YES + GCC_WARN_ABOUT_RETURN_TYPE + YES_ERROR + GCC_WARN_UNDECLARED_SELECTOR + YES + GCC_WARN_UNINITIALIZED_AUTOS + YES_AGGRESSIVE + GCC_WARN_UNUSED_FUNCTION + YES + GCC_WARN_UNUSED_VARIABLE + YES + IPHONEOS_DEPLOYMENT_TARGET + 8.1 + MTL_ENABLE_DEBUG_INFO + NO + SDKROOT + iphoneos + TARGETED_DEVICE_FAMILY + 1,2 + VALIDATE_PRODUCT + YES + + isa + XCBuildConfiguration + name + Release + + EC55A2AC1A2C2D3E00488D4C + + buildConfigurations + + EC55A2AD1A2C2D3E00488D4C + EC55A2AE1A2C2D3E00488D4C + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + EC55A2AD1A2C2D3E00488D4C + + baseConfigurationReference + 74883FFA65CCAA515622A0F1 + buildSettings + + ASSETCATALOG_COMPILER_APPICON_NAME + AppIcon + INFOPLIST_FILE + iHabit/Info.plist + LD_RUNPATH_SEARCH_PATHS + $(inherited) @executable_path/Frameworks + PRODUCT_NAME + $(TARGET_NAME) + + isa + XCBuildConfiguration + name + Debug + + EC55A2AE1A2C2D3E00488D4C + + baseConfigurationReference + 60C7E73AA0F2F43CD917A9E6 + buildSettings + + ASSETCATALOG_COMPILER_APPICON_NAME + AppIcon + INFOPLIST_FILE + iHabit/Info.plist + LD_RUNPATH_SEARCH_PATHS + $(inherited) @executable_path/Frameworks + PRODUCT_NAME + $(TARGET_NAME) + + isa + XCBuildConfiguration + name + Release + + EC55A2AF1A2C2D3E00488D4C + + buildConfigurations + + EC55A2B01A2C2D3E00488D4C + EC55A2B11A2C2D3E00488D4C + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + EC55A2B01A2C2D3E00488D4C + + baseConfigurationReference + D12863C1136CBB00C1307621 + buildSettings + + BUNDLE_LOADER + $(TEST_HOST) + FRAMEWORK_SEARCH_PATHS + + $(SDKROOT)/Developer/Library/Frameworks + $(inherited) + + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + INFOPLIST_FILE + iHabitTests/Info.plist + LD_RUNPATH_SEARCH_PATHS + $(inherited) @executable_path/Frameworks @loader_path/Frameworks + PRODUCT_NAME + $(TARGET_NAME) + TEST_HOST + $(BUILT_PRODUCTS_DIR)/iHabit.app/iHabit + + isa + XCBuildConfiguration + name + Debug + + EC55A2B11A2C2D3E00488D4C + + baseConfigurationReference + 5780C07F6DD8995732F7D1FF + buildSettings + + BUNDLE_LOADER + $(TEST_HOST) + FRAMEWORK_SEARCH_PATHS + + $(SDKROOT)/Developer/Library/Frameworks + $(inherited) + + INFOPLIST_FILE + iHabitTests/Info.plist + LD_RUNPATH_SEARCH_PATHS + $(inherited) @executable_path/Frameworks @loader_path/Frameworks + PRODUCT_NAME + $(TARGET_NAME) + TEST_HOST + $(BUILT_PRODUCTS_DIR)/iHabit.app/iHabit + + isa + XCBuildConfiguration + name + Release + + EF4B7C91BCFB7136CCB08CE8 + + children + + 4999720AA74C0E5AD0D5903C + FE5D40FCFC579DA59F6D2237 + + isa + PBXGroup + name + Frameworks + sourceTree + <group> + + FE5D40FCFC579DA59F6D2237 + + explicitFileType + archive.ar + includeInIndex + 0 + isa + PBXFileReference + path + libPods-iHabitTests.a + sourceTree + BUILT_PRODUCTS_DIR + + + rootObject + EC55A2811A2C2D3E00488D4C + + diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit.xcworkspace/contents.xcworkspacedata" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit.xcworkspace/contents.xcworkspacedata" new file mode 100644 index 00000000..d9bb332f --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit.xcworkspace/contents.xcworkspacedata" @@ -0,0 +1,10 @@ + + + + + + + diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AppDelegate.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AppDelegate.m" index b1b3de5f..18e05506 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AppDelegate.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AppDelegate.m" @@ -7,6 +7,7 @@ // #import "AppDelegate.h" +#import @interface AppDelegate () @@ -17,6 +18,7 @@ @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. + [MagicalRecord setupCoreDataStackWithStoreNamed: @"iHabitDB.sqlite"]; return YES; } @@ -40,6 +42,7 @@ - (void)applicationDidBecomeActive:(UIApplication *)application { - (void)applicationWillTerminate:(UIApplication *)application { // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + [MagicalRecord cleanUp]; } @end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Base.lproj/Main.storyboard" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Base.lproj/Main.storyboard" index f56d2f3b..bebd9f51 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Base.lproj/Main.storyboard" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Base.lproj/Main.storyboard" @@ -1,13 +1,13 @@ - + - + - + diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Habit.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Habit.h" new file mode 100644 index 00000000..38f7308e --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Habit.h" @@ -0,0 +1,25 @@ +// +// Habit.h +// iHabit +// +// Created by 陆钟豪 on 14/12/3. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import +#import + + +@interface Habit : NSManagedObject + +@property (nonatomic, retain) NSDate * createTime; +@property (nonatomic, retain) NSString * title; +@property (nonatomic, retain) NSNumber * period; +@property (nonatomic, retain) NSNumber * times; +@property (nonatomic, retain) NSString * icon; +@property (nonatomic, retain) NSDate * doTime; +@property (nonatomic, retain) NSDate * postponeTime; +@property (nonatomic, retain) NSDate * nextDoTime; +@property (nonatomic, retain) NSDate * periodEndTime; + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Habit.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Habit.m" new file mode 100644 index 00000000..abf857c9 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Habit.m" @@ -0,0 +1,24 @@ +// +// Habit.m +// iHabit +// +// Created by 陆钟豪 on 14/12/3. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import "Habit.h" + + +@implementation Habit + +@dynamic createTime; +@dynamic title; +@dynamic period; +@dynamic times; +@dynamic icon; +@dynamic doTime; +@dynamic postponeTime; +@dynamic nextDoTime; +@dynamic periodEndTime; + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HistoryAction.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HistoryAction.h" new file mode 100644 index 00000000..63a46ed2 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HistoryAction.h" @@ -0,0 +1,19 @@ +// +// HistoryAction.h +// iHabit +// +// Created by 陆钟豪 on 14/12/3. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import +#import + + +@interface HistoryAction : NSManagedObject + +@property (nonatomic, retain) NSString * habitId; +@property (nonatomic, retain) NSNumber * type; +@property (nonatomic, retain) NSDate * actionTime; + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HistoryAction.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HistoryAction.m" new file mode 100644 index 00000000..11a68164 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HistoryAction.m" @@ -0,0 +1,18 @@ +// +// HistoryAction.m +// iHabit +// +// Created by 陆钟豪 on 14/12/3. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import "HistoryAction.h" + + +@implementation HistoryAction + +@dynamic habitId; +@dynamic type; +@dynamic actionTime; + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HistoryPeriod.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HistoryPeriod.h" new file mode 100644 index 00000000..16c30c13 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HistoryPeriod.h" @@ -0,0 +1,21 @@ +// +// HistoryPeriod.h +// iHabit +// +// Created by 陆钟豪 on 14/12/3. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import +#import + + +@interface HistoryPeriod : NSManagedObject + +@property (nonatomic, retain) NSString * habitId; +@property (nonatomic, retain) NSNumber * period; +@property (nonatomic, retain) NSNumber * times; +@property (nonatomic, retain) NSDate * periodEndTime; +@property (nonatomic, retain) NSDate * doneTimes; + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HistoryPeriod.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HistoryPeriod.m" new file mode 100644 index 00000000..a79dfa4c --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HistoryPeriod.m" @@ -0,0 +1,20 @@ +// +// HistoryPeriod.m +// iHabit +// +// Created by 陆钟豪 on 14/12/3. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import "HistoryPeriod.h" + + +@implementation HistoryPeriod + +@dynamic habitId; +@dynamic period; +@dynamic times; +@dynamic periodEndTime; +@dynamic doneTimes; + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/iHabitDB.xcdatamodeld/iHabitDB.xcdatamodel/contents" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/iHabitDB.xcdatamodeld/iHabitDB.xcdatamodel/contents" new file mode 100644 index 00000000..ed035303 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/iHabitDB.xcdatamodeld/iHabitDB.xcdatamodel/contents" @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabitTests/iHabitTests.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabitTests/iHabitTests.m" index 78ad1deb..1777aef9 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabitTests/iHabitTests.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabitTests/iHabitTests.m" @@ -8,6 +8,8 @@ #import #import +#import +#import "Habit.h" @interface iHabitTests : XCTestCase @@ -18,16 +20,22 @@ @implementation iHabitTests - (void)setUp { [super setUp]; // Put setup code here. This method is called before the invocation of each test method in the class. + [MagicalRecord setupCoreDataStackWithStoreNamed: @"iHabitDB.sqlite"]; } - (void)tearDown { // Put teardown code here. This method is called after the invocation of each test method in the class. + [MagicalRecord cleanUp]; [super tearDown]; } - (void)testExample { // This is an example of a functional test case. - XCTAssert(YES, @"Pass"); + Habit *newHabit = [Habit MR_createEntity]; + newHabit.title = @"testtitle"; + [[NSManagedObjectContext MR_defaultContext]MR_saveToPersistentStoreAndWait]; + Habit *habit = [Habit MR_findFirst]; + XCTAssert([habit.title isEqualToString:@"testtitle"], @"Pass"); } - (void)testPerformanceExample { From 8125f84c97990ef27cb1864d75808cadc8f9f03a Mon Sep 17 00:00:00 2001 From: varvelworld Date: Sun, 14 Dec 2014 23:53:44 +0800 Subject: [PATCH 08/19] developing --- .../iHabit/iHabit.xcodeproj/project.pbxproj" | 1934 ++++++----------- .../iHabit/iHabit/AddHabitViewController.h" | 23 + .../iHabit/iHabit/AddHabitViewController.m" | 91 + .../iHabit/iHabit/AddHabitViewController.xib" | 60 + .../iHabit/iHabit/AppDelegate.m" | 13 + .../iHabit/Base.lproj/LaunchScreen.xib" | 4 +- .../iHabit/iHabit/CellActionView.h" | 14 + .../iHabit/iHabit/CellActionView.m" | 20 + .../iHabit/iHabit/Habit.h" | 29 +- .../iHabit/iHabit/Habit.m" | 17 +- .../iHabit/iHabit/HabitBiz.h" | 21 + .../iHabit/iHabit/HabitBiz.m" | 125 ++ .../iHabit/HabitTableCellViewController.h" | 17 + .../iHabit/HabitTableCellViewController.m" | 173 ++ .../iHabit/iHabit/HabitTableViewCell.h" | 18 + .../iHabit/iHabit/HabitTableViewCell.m" | 34 + .../iHabit/iHabit/HabitTableViewController.h" | 14 + .../iHabit/iHabit/HabitTableViewController.m" | 88 + .../start.imageset/Contents.json" | 21 + .../start.imageset/star@2x.png" | Bin 0 -> 635 bytes .../iHabit/iHabit/Info.plist" | 5 + .../iHabit/iHabit/InnerShadowView.h" | 20 + .../iHabit/iHabit/InnerShadowView.m" | 46 + .../iHabit/iHabit/Raleway_Medium_Tracked.ttf" | Bin 0 -> 59420 bytes .../iHabit/Raleway_Regular_Tracked.ttf" | Bin 0 -> 59472 bytes .../iHabit/iHabit/TimeLineView.h" | 17 + .../iHabit/iHabit/TimeLineView.m" | 66 + .../iHabit/iHabit/ViewController.h" | 1 + .../iHabitDB.xcdatamodel/contents" | 13 +- 29 files changed, 1614 insertions(+), 1270 deletions(-) create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.h" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.m" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.xib" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/CellActionView.h" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/CellActionView.m" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBiz.h" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBiz.m" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableCellViewController.h" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableCellViewController.m" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewCell.h" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewCell.m" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewController.h" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewController.m" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/start.imageset/Contents.json" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/start.imageset/star@2x.png" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/InnerShadowView.h" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/InnerShadowView.m" create mode 100755 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Raleway_Medium_Tracked.ttf" create mode 100755 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Raleway_Regular_Tracked.ttf" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/TimeLineView.h" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/TimeLineView.m" diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit.xcodeproj/project.pbxproj" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit.xcodeproj/project.pbxproj" index a480c4f8..f26a2384 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit.xcodeproj/project.pbxproj" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit.xcodeproj/project.pbxproj" @@ -1,1251 +1,683 @@ - - - - - archiveVersion - 1 - classes - - objectVersion - 46 - objects - - 12706CB5999595FF76321234 - - buildActionMask - 2147483647 - files - - inputPaths - - isa - PBXShellScriptBuildPhase - name - Copy Pods Resources - outputPaths - - runOnlyForDeploymentPostprocessing - 0 - shellPath - /bin/sh - shellScript - "${SRCROOT}/Pods/Target Support Files/Pods-iHabit/Pods-iHabit-resources.sh" - - showEnvVarsInLog - 0 - - 459DD1A24354887D9EE47FAB - - children - - 74883FFA65CCAA515622A0F1 - 60C7E73AA0F2F43CD917A9E6 - D12863C1136CBB00C1307621 - 5780C07F6DD8995732F7D1FF - - isa - PBXGroup - name - Pods - sourceTree - <group> - - 4999720AA74C0E5AD0D5903C - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - path - libPods-iHabit.a - sourceTree - BUILT_PRODUCTS_DIR - - 4BBC0F4413DC9B9C8D5D144C - - fileRef - 4999720AA74C0E5AD0D5903C - isa - PBXBuildFile - - 5780C07F6DD8995732F7D1FF - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - name - Pods-iHabitTests.release.xcconfig - path - Pods/Target Support Files/Pods-iHabitTests/Pods-iHabitTests.release.xcconfig - sourceTree - <group> - - 5D8688A2CF83CF37104E9575 - - buildActionMask - 2147483647 - files - - inputPaths - - isa - PBXShellScriptBuildPhase - name - Check Pods Manifest.lock - outputPaths - - runOnlyForDeploymentPostprocessing - 0 - shellPath - /bin/sh - shellScript - diff "${PODS_ROOT}/../Podfile.lock" "${PODS_ROOT}/Manifest.lock" > /dev/null -if [[ $? != 0 ]] ; then - cat << EOM -error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation. -EOM - exit 1 -fi - - showEnvVarsInLog - 0 - - 60C7E73AA0F2F43CD917A9E6 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - name - Pods-iHabit.release.xcconfig - path - Pods/Target Support Files/Pods-iHabit/Pods-iHabit.release.xcconfig - sourceTree - <group> - - 63ED9AE7BF250DF690224151 - - buildActionMask - 2147483647 - files - - inputPaths - - isa - PBXShellScriptBuildPhase - name - Check Pods Manifest.lock - outputPaths - - runOnlyForDeploymentPostprocessing - 0 - shellPath - /bin/sh - shellScript - diff "${PODS_ROOT}/../Podfile.lock" "${PODS_ROOT}/Manifest.lock" > /dev/null -if [[ $? != 0 ]] ; then - cat << EOM -error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation. -EOM - exit 1 -fi - - showEnvVarsInLog - 0 - - 74883FFA65CCAA515622A0F1 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - name - Pods-iHabit.debug.xcconfig - path - Pods/Target Support Files/Pods-iHabit/Pods-iHabit.debug.xcconfig - sourceTree - <group> - - 96A42CF94F461F5F5B9D86EC - - fileRef - FE5D40FCFC579DA59F6D2237 - isa - PBXBuildFile - - D12863C1136CBB00C1307621 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - name - Pods-iHabitTests.debug.xcconfig - path - Pods/Target Support Files/Pods-iHabitTests/Pods-iHabitTests.debug.xcconfig - sourceTree - <group> - - D19B6EFFC9FECB9B00BE0BD4 - - buildActionMask - 2147483647 - files - - inputPaths - - isa - PBXShellScriptBuildPhase - name - Copy Pods Resources - outputPaths - - runOnlyForDeploymentPostprocessing - 0 - shellPath - /bin/sh - shellScript - "${SRCROOT}/Pods/Target Support Files/Pods-iHabitTests/Pods-iHabitTests-resources.sh" - - showEnvVarsInLog - 0 - - EC4C42E41A2EDAEA00A82D8D - - children - - EC4C42E51A2EDAEA00A82D8D - - currentVersion - EC4C42E51A2EDAEA00A82D8D - isa - XCVersionGroup - path - iHabitDB.xcdatamodeld - sourceTree - <group> - versionGroupType - wrapper.xcdatamodel - - EC4C42E51A2EDAEA00A82D8D - - isa - PBXFileReference - lastKnownFileType - wrapper.xcdatamodel - path - iHabitDB.xcdatamodel - sourceTree - <group> - - EC4C42E61A2EDAEA00A82D8D - - fileRef - EC4C42E41A2EDAEA00A82D8D - isa - PBXBuildFile - - EC4C42E71A2EDAEA00A82D8D - - fileRef - EC4C42E41A2EDAEA00A82D8D - isa - PBXBuildFile - - EC4C42E81A2EE35700A82D8D - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - HistoryPeriod.h - sourceTree - <group> - - EC4C42E91A2EE35700A82D8D - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - HistoryPeriod.m - sourceTree - <group> - - EC4C42EA1A2EE35700A82D8D - - fileRef - EC4C42E91A2EE35700A82D8D - isa - PBXBuildFile - - EC4C42EB1A2EE35700A82D8D - - fileRef - EC4C42E91A2EE35700A82D8D - isa - PBXBuildFile - - EC4C42EC1A2EE35800A82D8D - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - HistoryAction.h - sourceTree - <group> - - EC4C42ED1A2EE35800A82D8D - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - HistoryAction.m - sourceTree - <group> - - EC4C42EE1A2EE35800A82D8D - - fileRef - EC4C42ED1A2EE35800A82D8D - isa - PBXBuildFile - - EC4C42EF1A2EE35800A82D8D - - fileRef - EC4C42ED1A2EE35800A82D8D - isa - PBXBuildFile - - EC4C42F01A2EE35800A82D8D - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Habit.h - sourceTree - <group> - - EC4C42F11A2EE35800A82D8D - - fileEncoding - 4 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - Habit.m - sourceTree - <group> - - EC4C42F21A2EE35800A82D8D - - fileRef - EC4C42F11A2EE35800A82D8D - isa - PBXBuildFile - - EC4C42F31A2EE35800A82D8D - - fileRef - EC4C42F11A2EE35800A82D8D - isa - PBXBuildFile - - EC55A2801A2C2D3E00488D4C - - children - - EC55A28B1A2C2D3E00488D4C - EC55A2A51A2C2D3E00488D4C - EC55A28A1A2C2D3E00488D4C - 459DD1A24354887D9EE47FAB - EF4B7C91BCFB7136CCB08CE8 - - isa - PBXGroup - sourceTree - <group> - - EC55A2811A2C2D3E00488D4C - - attributes - - LastUpgradeCheck - 0610 - ORGANIZATIONNAME - lzh - TargetAttributes - - EC55A2881A2C2D3E00488D4C - - CreatedOnToolsVersion - 6.1 - - EC55A2A11A2C2D3E00488D4C - - CreatedOnToolsVersion - 6.1 - TestTargetID - EC55A2881A2C2D3E00488D4C - - - - buildConfigurationList - EC55A2841A2C2D3E00488D4C - compatibilityVersion - Xcode 3.2 - developmentRegion - English - hasScannedForEncodings - 0 - isa - PBXProject - knownRegions - - en - Base - - mainGroup - EC55A2801A2C2D3E00488D4C - productRefGroup - EC55A28A1A2C2D3E00488D4C - projectDirPath - - projectReferences - - projectRoot - - targets - - EC55A2881A2C2D3E00488D4C - EC55A2A11A2C2D3E00488D4C - - - EC55A2841A2C2D3E00488D4C - - buildConfigurations - - EC55A2AA1A2C2D3E00488D4C - EC55A2AB1A2C2D3E00488D4C - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - EC55A2851A2C2D3E00488D4C - - buildActionMask - 2147483647 - files - - EC4C42E61A2EDAEA00A82D8D - EC55A2951A2C2D3E00488D4C - EC4C42EA1A2EE35700A82D8D - EC55A2921A2C2D3E00488D4C - EC4C42EE1A2EE35800A82D8D - EC4C42F21A2EE35800A82D8D - EC55A28F1A2C2D3E00488D4C - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - EC55A2861A2C2D3E00488D4C - - buildActionMask - 2147483647 - files - - 4BBC0F4413DC9B9C8D5D144C - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - EC55A2871A2C2D3E00488D4C - - buildActionMask - 2147483647 - files - - EC55A2981A2C2D3E00488D4C - EC55A29D1A2C2D3E00488D4C - EC55A29A1A2C2D3E00488D4C - - isa - PBXResourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - EC55A2881A2C2D3E00488D4C - - buildConfigurationList - EC55A2AC1A2C2D3E00488D4C - buildPhases - - 5D8688A2CF83CF37104E9575 - EC55A2851A2C2D3E00488D4C - EC55A2861A2C2D3E00488D4C - EC55A2871A2C2D3E00488D4C - 12706CB5999595FF76321234 - - buildRules - - dependencies - - isa - PBXNativeTarget - name - iHabit - productName - iHabit - productReference - EC55A2891A2C2D3E00488D4C - productType - com.apple.product-type.application - - EC55A2891A2C2D3E00488D4C - - explicitFileType - wrapper.application - includeInIndex - 0 - isa - PBXFileReference - path - iHabit.app - sourceTree - BUILT_PRODUCTS_DIR - - EC55A28A1A2C2D3E00488D4C - - children - - EC55A2891A2C2D3E00488D4C - EC55A2A21A2C2D3E00488D4C - - isa - PBXGroup - name - Products - sourceTree - <group> - - EC55A28B1A2C2D3E00488D4C - - children - - EC55A2901A2C2D3E00488D4C - EC55A2911A2C2D3E00488D4C - EC55A2931A2C2D3E00488D4C - EC55A2941A2C2D3E00488D4C - EC55A2961A2C2D3E00488D4C - EC55A2991A2C2D3E00488D4C - EC55A29B1A2C2D3E00488D4C - EC55A28C1A2C2D3E00488D4C - EC4C42E41A2EDAEA00A82D8D - EC4C42F01A2EE35800A82D8D - EC4C42F11A2EE35800A82D8D - EC4C42EC1A2EE35800A82D8D - EC4C42ED1A2EE35800A82D8D - EC4C42E81A2EE35700A82D8D - EC4C42E91A2EE35700A82D8D - - isa - PBXGroup - path - iHabit - sourceTree - <group> - - EC55A28C1A2C2D3E00488D4C - - children - - EC55A28D1A2C2D3E00488D4C - EC55A28E1A2C2D3E00488D4C - - isa - PBXGroup - name - Supporting Files - sourceTree - <group> - - EC55A28D1A2C2D3E00488D4C - - isa - PBXFileReference - lastKnownFileType - text.plist.xml - path - Info.plist - sourceTree - <group> - - EC55A28E1A2C2D3E00488D4C - - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - main.m - sourceTree - <group> - - EC55A28F1A2C2D3E00488D4C - - fileRef - EC55A28E1A2C2D3E00488D4C - isa - PBXBuildFile - - EC55A2901A2C2D3E00488D4C - - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - AppDelegate.h - sourceTree - <group> - - EC55A2911A2C2D3E00488D4C - - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - AppDelegate.m - sourceTree - <group> - - EC55A2921A2C2D3E00488D4C - - fileRef - EC55A2911A2C2D3E00488D4C - isa - PBXBuildFile - - EC55A2931A2C2D3E00488D4C - - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - ViewController.h - sourceTree - <group> - - EC55A2941A2C2D3E00488D4C - - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - ViewController.m - sourceTree - <group> - - EC55A2951A2C2D3E00488D4C - - fileRef - EC55A2941A2C2D3E00488D4C - isa - PBXBuildFile - - EC55A2961A2C2D3E00488D4C - - children - - EC55A2971A2C2D3E00488D4C - - isa - PBXVariantGroup - name - Main.storyboard - sourceTree - <group> - - EC55A2971A2C2D3E00488D4C - - isa - PBXFileReference - lastKnownFileType - file.storyboard - name - Base - path - Base.lproj/Main.storyboard - sourceTree - <group> - - EC55A2981A2C2D3E00488D4C - - fileRef - EC55A2961A2C2D3E00488D4C - isa - PBXBuildFile - - EC55A2991A2C2D3E00488D4C - - isa - PBXFileReference - lastKnownFileType - folder.assetcatalog - path - Images.xcassets - sourceTree - <group> - - EC55A29A1A2C2D3E00488D4C - - fileRef - EC55A2991A2C2D3E00488D4C - isa - PBXBuildFile - - EC55A29B1A2C2D3E00488D4C - - children - - EC55A29C1A2C2D3E00488D4C - - isa - PBXVariantGroup - name - LaunchScreen.xib - sourceTree - <group> - - EC55A29C1A2C2D3E00488D4C - - isa - PBXFileReference - lastKnownFileType - file.xib - name - Base - path - Base.lproj/LaunchScreen.xib - sourceTree - <group> - - EC55A29D1A2C2D3E00488D4C - - fileRef - EC55A29B1A2C2D3E00488D4C - isa - PBXBuildFile - - EC55A29E1A2C2D3E00488D4C - - buildActionMask - 2147483647 - files - - EC4C42F31A2EE35800A82D8D - EC4C42E71A2EDAEA00A82D8D - EC55A2A91A2C2D3E00488D4C - EC4C42EF1A2EE35800A82D8D - EC4C42EB1A2EE35700A82D8D - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - EC55A29F1A2C2D3E00488D4C - - buildActionMask - 2147483647 - files - - 96A42CF94F461F5F5B9D86EC - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - EC55A2A01A2C2D3E00488D4C - - buildActionMask - 2147483647 - files - - isa - PBXResourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - EC55A2A11A2C2D3E00488D4C - - buildConfigurationList - EC55A2AF1A2C2D3E00488D4C - buildPhases - - 63ED9AE7BF250DF690224151 - EC55A29E1A2C2D3E00488D4C - EC55A29F1A2C2D3E00488D4C - EC55A2A01A2C2D3E00488D4C - D19B6EFFC9FECB9B00BE0BD4 - - buildRules - - dependencies - - EC55A2A41A2C2D3E00488D4C - - isa - PBXNativeTarget - name - iHabitTests - productName - iHabitTests - productReference - EC55A2A21A2C2D3E00488D4C - productType - com.apple.product-type.bundle.unit-test - - EC55A2A21A2C2D3E00488D4C - - explicitFileType - wrapper.cfbundle - includeInIndex - 0 - isa - PBXFileReference - path - iHabitTests.xctest - sourceTree - BUILT_PRODUCTS_DIR - - EC55A2A31A2C2D3E00488D4C - - containerPortal - EC55A2811A2C2D3E00488D4C - isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - EC55A2881A2C2D3E00488D4C - remoteInfo - iHabit - - EC55A2A41A2C2D3E00488D4C - - isa - PBXTargetDependency - target - EC55A2881A2C2D3E00488D4C - targetProxy - EC55A2A31A2C2D3E00488D4C - - EC55A2A51A2C2D3E00488D4C - - children - - EC55A2A81A2C2D3E00488D4C - EC55A2A61A2C2D3E00488D4C - - isa - PBXGroup - path - iHabitTests - sourceTree - <group> - - EC55A2A61A2C2D3E00488D4C - - children - - EC55A2A71A2C2D3E00488D4C - - isa - PBXGroup - name - Supporting Files - sourceTree - <group> - - EC55A2A71A2C2D3E00488D4C - - isa - PBXFileReference - lastKnownFileType - text.plist.xml - path - Info.plist - sourceTree - <group> - - EC55A2A81A2C2D3E00488D4C - - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - iHabitTests.m - sourceTree - <group> - - EC55A2A91A2C2D3E00488D4C - - fileRef - EC55A2A81A2C2D3E00488D4C - isa - PBXBuildFile - - EC55A2AA1A2C2D3E00488D4C - - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - CLANG_CXX_LANGUAGE_STANDARD - gnu++0x - CLANG_CXX_LIBRARY - libc++ - CLANG_ENABLE_MODULES - YES - CLANG_ENABLE_OBJC_ARC - YES - CLANG_WARN_BOOL_CONVERSION - YES - CLANG_WARN_CONSTANT_CONVERSION - YES - CLANG_WARN_DIRECT_OBJC_ISA_USAGE - YES_ERROR - CLANG_WARN_EMPTY_BODY - YES - CLANG_WARN_ENUM_CONVERSION - YES - CLANG_WARN_INT_CONVERSION - YES - CLANG_WARN_OBJC_ROOT_CLASS - YES_ERROR - CLANG_WARN_UNREACHABLE_CODE - YES - CLANG_WARN__DUPLICATE_METHOD_MATCH - YES - CODE_SIGN_IDENTITY[sdk=iphoneos*] - iPhone Developer - COPY_PHASE_STRIP - NO - ENABLE_STRICT_OBJC_MSGSEND - YES - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_WARN_64_TO_32_BIT_CONVERSION - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES_ERROR - GCC_WARN_UNDECLARED_SELECTOR - YES - GCC_WARN_UNINITIALIZED_AUTOS - YES_AGGRESSIVE - GCC_WARN_UNUSED_FUNCTION - YES - GCC_WARN_UNUSED_VARIABLE - YES - IPHONEOS_DEPLOYMENT_TARGET - 8.1 - MTL_ENABLE_DEBUG_INFO - YES - ONLY_ACTIVE_ARCH - YES - SDKROOT - iphoneos - TARGETED_DEVICE_FAMILY - 1,2 - - isa - XCBuildConfiguration - name - Debug - - EC55A2AB1A2C2D3E00488D4C - - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - CLANG_CXX_LANGUAGE_STANDARD - gnu++0x - CLANG_CXX_LIBRARY - libc++ - CLANG_ENABLE_MODULES - YES - CLANG_ENABLE_OBJC_ARC - YES - CLANG_WARN_BOOL_CONVERSION - YES - CLANG_WARN_CONSTANT_CONVERSION - YES - CLANG_WARN_DIRECT_OBJC_ISA_USAGE - YES_ERROR - CLANG_WARN_EMPTY_BODY - YES - CLANG_WARN_ENUM_CONVERSION - YES - CLANG_WARN_INT_CONVERSION - YES - CLANG_WARN_OBJC_ROOT_CLASS - YES_ERROR - CLANG_WARN_UNREACHABLE_CODE - YES - CLANG_WARN__DUPLICATE_METHOD_MATCH - YES - CODE_SIGN_IDENTITY[sdk=iphoneos*] - iPhone Developer - COPY_PHASE_STRIP - YES - ENABLE_NS_ASSERTIONS - NO - ENABLE_STRICT_OBJC_MSGSEND - YES - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_WARN_64_TO_32_BIT_CONVERSION - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES_ERROR - GCC_WARN_UNDECLARED_SELECTOR - YES - GCC_WARN_UNINITIALIZED_AUTOS - YES_AGGRESSIVE - GCC_WARN_UNUSED_FUNCTION - YES - GCC_WARN_UNUSED_VARIABLE - YES - IPHONEOS_DEPLOYMENT_TARGET - 8.1 - MTL_ENABLE_DEBUG_INFO - NO - SDKROOT - iphoneos - TARGETED_DEVICE_FAMILY - 1,2 - VALIDATE_PRODUCT - YES - - isa - XCBuildConfiguration - name - Release - - EC55A2AC1A2C2D3E00488D4C - - buildConfigurations - - EC55A2AD1A2C2D3E00488D4C - EC55A2AE1A2C2D3E00488D4C - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - EC55A2AD1A2C2D3E00488D4C - - baseConfigurationReference - 74883FFA65CCAA515622A0F1 - buildSettings - - ASSETCATALOG_COMPILER_APPICON_NAME - AppIcon - INFOPLIST_FILE - iHabit/Info.plist - LD_RUNPATH_SEARCH_PATHS - $(inherited) @executable_path/Frameworks - PRODUCT_NAME - $(TARGET_NAME) - - isa - XCBuildConfiguration - name - Debug - - EC55A2AE1A2C2D3E00488D4C - - baseConfigurationReference - 60C7E73AA0F2F43CD917A9E6 - buildSettings - - ASSETCATALOG_COMPILER_APPICON_NAME - AppIcon - INFOPLIST_FILE - iHabit/Info.plist - LD_RUNPATH_SEARCH_PATHS - $(inherited) @executable_path/Frameworks - PRODUCT_NAME - $(TARGET_NAME) - - isa - XCBuildConfiguration - name - Release - - EC55A2AF1A2C2D3E00488D4C - - buildConfigurations - - EC55A2B01A2C2D3E00488D4C - EC55A2B11A2C2D3E00488D4C - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - EC55A2B01A2C2D3E00488D4C - - baseConfigurationReference - D12863C1136CBB00C1307621 - buildSettings - - BUNDLE_LOADER - $(TEST_HOST) - FRAMEWORK_SEARCH_PATHS - - $(SDKROOT)/Developer/Library/Frameworks - $(inherited) - - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - INFOPLIST_FILE - iHabitTests/Info.plist - LD_RUNPATH_SEARCH_PATHS - $(inherited) @executable_path/Frameworks @loader_path/Frameworks - PRODUCT_NAME - $(TARGET_NAME) - TEST_HOST - $(BUILT_PRODUCTS_DIR)/iHabit.app/iHabit - - isa - XCBuildConfiguration - name - Debug - - EC55A2B11A2C2D3E00488D4C - - baseConfigurationReference - 5780C07F6DD8995732F7D1FF - buildSettings - - BUNDLE_LOADER - $(TEST_HOST) - FRAMEWORK_SEARCH_PATHS - - $(SDKROOT)/Developer/Library/Frameworks - $(inherited) - - INFOPLIST_FILE - iHabitTests/Info.plist - LD_RUNPATH_SEARCH_PATHS - $(inherited) @executable_path/Frameworks @loader_path/Frameworks - PRODUCT_NAME - $(TARGET_NAME) - TEST_HOST - $(BUILT_PRODUCTS_DIR)/iHabit.app/iHabit - - isa - XCBuildConfiguration - name - Release - - EF4B7C91BCFB7136CCB08CE8 - - children - - 4999720AA74C0E5AD0D5903C - FE5D40FCFC579DA59F6D2237 - - isa - PBXGroup - name - Frameworks - sourceTree - <group> - - FE5D40FCFC579DA59F6D2237 - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - path - libPods-iHabitTests.a - sourceTree - BUILT_PRODUCTS_DIR - - - rootObject - EC55A2811A2C2D3E00488D4C - - +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 4BBC0F4413DC9B9C8D5D144C /* libPods-iHabit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4999720AA74C0E5AD0D5903C /* libPods-iHabit.a */; }; + 96A42CF94F461F5F5B9D86EC /* libPods-iHabitTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FE5D40FCFC579DA59F6D2237 /* libPods-iHabitTests.a */; }; + EC4C42E61A2EDAEA00A82D8D /* iHabitDB.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = EC4C42E41A2EDAEA00A82D8D /* iHabitDB.xcdatamodeld */; }; + EC4C42E71A2EDAEA00A82D8D /* iHabitDB.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = EC4C42E41A2EDAEA00A82D8D /* iHabitDB.xcdatamodeld */; }; + EC4C42EA1A2EE35700A82D8D /* HistoryPeriod.m in Sources */ = {isa = PBXBuildFile; fileRef = EC4C42E91A2EE35700A82D8D /* HistoryPeriod.m */; }; + EC4C42EB1A2EE35700A82D8D /* HistoryPeriod.m in Sources */ = {isa = PBXBuildFile; fileRef = EC4C42E91A2EE35700A82D8D /* HistoryPeriod.m */; }; + EC4C42EE1A2EE35800A82D8D /* HistoryAction.m in Sources */ = {isa = PBXBuildFile; fileRef = EC4C42ED1A2EE35800A82D8D /* HistoryAction.m */; }; + EC4C42EF1A2EE35800A82D8D /* HistoryAction.m in Sources */ = {isa = PBXBuildFile; fileRef = EC4C42ED1A2EE35800A82D8D /* HistoryAction.m */; }; + EC4C42F61A2EEE6200A82D8D /* HabitTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EC4C42F51A2EEE6200A82D8D /* HabitTableViewController.m */; }; + EC4C42F91A2EFB3E00A82D8D /* HabitTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = EC4C42F81A2EFB3E00A82D8D /* HabitTableViewCell.m */; }; + EC4C42FC1A2EFE0F00A82D8D /* HabitTableCellViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EC4C42FB1A2EFE0F00A82D8D /* HabitTableCellViewController.m */; }; + EC4C43021A2F254E00A82D8D /* TimeLineView.m in Sources */ = {isa = PBXBuildFile; fileRef = EC4C43011A2F254E00A82D8D /* TimeLineView.m */; }; + EC4C430B1A30953D00A82D8D /* Raleway_Medium_Tracked.ttf in Resources */ = {isa = PBXBuildFile; fileRef = EC4C43091A30953D00A82D8D /* Raleway_Medium_Tracked.ttf */; }; + EC4C430C1A30953D00A82D8D /* Raleway_Regular_Tracked.ttf in Resources */ = {isa = PBXBuildFile; fileRef = EC4C430A1A30953D00A82D8D /* Raleway_Regular_Tracked.ttf */; }; + EC4C43121A31A3D000A82D8D /* Habit.m in Sources */ = {isa = PBXBuildFile; fileRef = EC4C43111A31A3D000A82D8D /* Habit.m */; }; + EC55A28F1A2C2D3E00488D4C /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = EC55A28E1A2C2D3E00488D4C /* main.m */; }; + EC55A2921A2C2D3E00488D4C /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = EC55A2911A2C2D3E00488D4C /* AppDelegate.m */; }; + EC55A2951A2C2D3E00488D4C /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EC55A2941A2C2D3E00488D4C /* ViewController.m */; }; + EC55A29A1A2C2D3E00488D4C /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EC55A2991A2C2D3E00488D4C /* Images.xcassets */; }; + EC55A2A91A2C2D3E00488D4C /* iHabitTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EC55A2A81A2C2D3E00488D4C /* iHabitTests.m */; }; + EC5A19511A3D835C00BA8092 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = EC5A194D1A3D835C00BA8092 /* LaunchScreen.xib */; }; + EC5A19521A3D835C00BA8092 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = EC5A194F1A3D835C00BA8092 /* Main.storyboard */; }; + EC73E7211A35C7AD00E6823E /* InnerShadowView.m in Sources */ = {isa = PBXBuildFile; fileRef = EC73E7201A35C7AD00E6823E /* InnerShadowView.m */; }; + EC73E7241A35CA0900E6823E /* CellActionView.m in Sources */ = {isa = PBXBuildFile; fileRef = EC73E7231A35CA0900E6823E /* CellActionView.m */; }; + EC73E7271A35D15100E6823E /* HabitBiz.m in Sources */ = {isa = PBXBuildFile; fileRef = EC73E7261A35D15100E6823E /* HabitBiz.m */; }; + EC73E7331A383B7400E6823E /* AddHabitViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EC73E7311A383B7400E6823E /* AddHabitViewController.m */; }; + EC73E7341A383B7400E6823E /* AddHabitViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = EC73E7321A383B7400E6823E /* AddHabitViewController.xib */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + EC55A2A31A2C2D3E00488D4C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = EC55A2811A2C2D3E00488D4C /* Project object */; + proxyType = 1; + remoteGlobalIDString = EC55A2881A2C2D3E00488D4C; + remoteInfo = iHabit; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 4999720AA74C0E5AD0D5903C /* libPods-iHabit.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-iHabit.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 5780C07F6DD8995732F7D1FF /* Pods-iHabitTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iHabitTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-iHabitTests/Pods-iHabitTests.release.xcconfig"; sourceTree = ""; }; + 60C7E73AA0F2F43CD917A9E6 /* Pods-iHabit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iHabit.release.xcconfig"; path = "Pods/Target Support Files/Pods-iHabit/Pods-iHabit.release.xcconfig"; sourceTree = ""; }; + 74883FFA65CCAA515622A0F1 /* Pods-iHabit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iHabit.debug.xcconfig"; path = "Pods/Target Support Files/Pods-iHabit/Pods-iHabit.debug.xcconfig"; sourceTree = ""; }; + D12863C1136CBB00C1307621 /* Pods-iHabitTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iHabitTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-iHabitTests/Pods-iHabitTests.debug.xcconfig"; sourceTree = ""; }; + EC4C42E51A2EDAEA00A82D8D /* iHabitDB.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = iHabitDB.xcdatamodel; sourceTree = ""; }; + EC4C42E81A2EE35700A82D8D /* HistoryPeriod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HistoryPeriod.h; sourceTree = ""; }; + EC4C42E91A2EE35700A82D8D /* HistoryPeriod.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HistoryPeriod.m; sourceTree = ""; }; + EC4C42EC1A2EE35800A82D8D /* HistoryAction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HistoryAction.h; sourceTree = ""; }; + EC4C42ED1A2EE35800A82D8D /* HistoryAction.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HistoryAction.m; sourceTree = ""; }; + EC4C42F41A2EEE6200A82D8D /* HabitTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HabitTableViewController.h; sourceTree = ""; }; + EC4C42F51A2EEE6200A82D8D /* HabitTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HabitTableViewController.m; sourceTree = ""; }; + EC4C42F71A2EFB3E00A82D8D /* HabitTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HabitTableViewCell.h; sourceTree = ""; }; + EC4C42F81A2EFB3E00A82D8D /* HabitTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HabitTableViewCell.m; sourceTree = ""; }; + EC4C42FA1A2EFE0F00A82D8D /* HabitTableCellViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HabitTableCellViewController.h; sourceTree = ""; }; + EC4C42FB1A2EFE0F00A82D8D /* HabitTableCellViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HabitTableCellViewController.m; sourceTree = ""; }; + EC4C43001A2F254E00A82D8D /* TimeLineView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TimeLineView.h; sourceTree = ""; }; + EC4C43011A2F254E00A82D8D /* TimeLineView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TimeLineView.m; sourceTree = ""; }; + EC4C43091A30953D00A82D8D /* Raleway_Medium_Tracked.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Raleway_Medium_Tracked.ttf; sourceTree = ""; }; + EC4C430A1A30953D00A82D8D /* Raleway_Regular_Tracked.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Raleway_Regular_Tracked.ttf; sourceTree = ""; }; + EC4C43101A31A3D000A82D8D /* Habit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Habit.h; sourceTree = ""; }; + EC4C43111A31A3D000A82D8D /* Habit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Habit.m; sourceTree = ""; }; + EC55A2891A2C2D3E00488D4C /* iHabit.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iHabit.app; sourceTree = BUILT_PRODUCTS_DIR; }; + EC55A28D1A2C2D3E00488D4C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + EC55A28E1A2C2D3E00488D4C /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + EC55A2901A2C2D3E00488D4C /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + EC55A2911A2C2D3E00488D4C /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + EC55A2931A2C2D3E00488D4C /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; + EC55A2941A2C2D3E00488D4C /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; + EC55A2991A2C2D3E00488D4C /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; + EC55A2A21A2C2D3E00488D4C /* iHabitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = iHabitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + EC55A2A71A2C2D3E00488D4C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + EC55A2A81A2C2D3E00488D4C /* iHabitTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = iHabitTests.m; sourceTree = ""; }; + EC5A194E1A3D835C00BA8092 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = LaunchScreen.xib; sourceTree = ""; }; + EC5A19501A3D835C00BA8092 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Main.storyboard; sourceTree = ""; }; + EC73E71F1A35C7AD00E6823E /* InnerShadowView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InnerShadowView.h; sourceTree = ""; }; + EC73E7201A35C7AD00E6823E /* InnerShadowView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = InnerShadowView.m; sourceTree = ""; }; + EC73E7221A35CA0900E6823E /* CellActionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CellActionView.h; sourceTree = ""; }; + EC73E7231A35CA0900E6823E /* CellActionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CellActionView.m; sourceTree = ""; }; + EC73E7251A35D15100E6823E /* HabitBiz.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HabitBiz.h; sourceTree = ""; }; + EC73E7261A35D15100E6823E /* HabitBiz.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HabitBiz.m; sourceTree = ""; }; + EC73E7301A383B7400E6823E /* AddHabitViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AddHabitViewController.h; sourceTree = ""; }; + EC73E7311A383B7400E6823E /* AddHabitViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AddHabitViewController.m; sourceTree = ""; }; + EC73E7321A383B7400E6823E /* AddHabitViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AddHabitViewController.xib; sourceTree = ""; }; + FE5D40FCFC579DA59F6D2237 /* libPods-iHabitTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-iHabitTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + EC55A2861A2C2D3E00488D4C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 4BBC0F4413DC9B9C8D5D144C /* libPods-iHabit.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EC55A29F1A2C2D3E00488D4C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 96A42CF94F461F5F5B9D86EC /* libPods-iHabitTests.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 459DD1A24354887D9EE47FAB /* Pods */ = { + isa = PBXGroup; + children = ( + 74883FFA65CCAA515622A0F1 /* Pods-iHabit.debug.xcconfig */, + 60C7E73AA0F2F43CD917A9E6 /* Pods-iHabit.release.xcconfig */, + D12863C1136CBB00C1307621 /* Pods-iHabitTests.debug.xcconfig */, + 5780C07F6DD8995732F7D1FF /* Pods-iHabitTests.release.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; + EC55A2801A2C2D3E00488D4C = { + isa = PBXGroup; + children = ( + EC55A28B1A2C2D3E00488D4C /* iHabit */, + EC55A2A51A2C2D3E00488D4C /* iHabitTests */, + EC55A28A1A2C2D3E00488D4C /* Products */, + 459DD1A24354887D9EE47FAB /* Pods */, + EF4B7C91BCFB7136CCB08CE8 /* Frameworks */, + ); + sourceTree = ""; + }; + EC55A28A1A2C2D3E00488D4C /* Products */ = { + isa = PBXGroup; + children = ( + EC55A2891A2C2D3E00488D4C /* iHabit.app */, + EC55A2A21A2C2D3E00488D4C /* iHabitTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + EC55A28B1A2C2D3E00488D4C /* iHabit */ = { + isa = PBXGroup; + children = ( + EC5A194C1A3D835C00BA8092 /* Base.lproj */, + EC73E72C1A38384D00E6823E /* CoreBiz */, + EC73E72B1A38383000E6823E /* Controller */, + EC73E72A1A38381500E6823E /* View */, + EC73E7291A3837E700E6823E /* Resource */, + EC73E7281A3837D300E6823E /* Data */, + EC55A2901A2C2D3E00488D4C /* AppDelegate.h */, + EC55A2911A2C2D3E00488D4C /* AppDelegate.m */, + EC55A2931A2C2D3E00488D4C /* ViewController.h */, + EC55A2941A2C2D3E00488D4C /* ViewController.m */, + EC55A28C1A2C2D3E00488D4C /* Supporting Files */, + ); + path = iHabit; + sourceTree = ""; + }; + EC55A28C1A2C2D3E00488D4C /* Supporting Files */ = { + isa = PBXGroup; + children = ( + EC55A28D1A2C2D3E00488D4C /* Info.plist */, + EC55A28E1A2C2D3E00488D4C /* main.m */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + EC55A2A51A2C2D3E00488D4C /* iHabitTests */ = { + isa = PBXGroup; + children = ( + EC55A2A81A2C2D3E00488D4C /* iHabitTests.m */, + EC55A2A61A2C2D3E00488D4C /* Supporting Files */, + ); + path = iHabitTests; + sourceTree = ""; + }; + EC55A2A61A2C2D3E00488D4C /* Supporting Files */ = { + isa = PBXGroup; + children = ( + EC55A2A71A2C2D3E00488D4C /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + EC5A194C1A3D835C00BA8092 /* Base.lproj */ = { + isa = PBXGroup; + children = ( + EC5A194D1A3D835C00BA8092 /* LaunchScreen.xib */, + EC5A194F1A3D835C00BA8092 /* Main.storyboard */, + ); + path = Base.lproj; + sourceTree = ""; + }; + EC73E7281A3837D300E6823E /* Data */ = { + isa = PBXGroup; + children = ( + EC4C42E41A2EDAEA00A82D8D /* iHabitDB.xcdatamodeld */, + EC4C43101A31A3D000A82D8D /* Habit.h */, + EC4C43111A31A3D000A82D8D /* Habit.m */, + EC4C42EC1A2EE35800A82D8D /* HistoryAction.h */, + EC4C42ED1A2EE35800A82D8D /* HistoryAction.m */, + EC4C42E81A2EE35700A82D8D /* HistoryPeriod.h */, + EC4C42E91A2EE35700A82D8D /* HistoryPeriod.m */, + ); + name = Data; + sourceTree = ""; + }; + EC73E7291A3837E700E6823E /* Resource */ = { + isa = PBXGroup; + children = ( + EC55A2991A2C2D3E00488D4C /* Images.xcassets */, + EC4C43091A30953D00A82D8D /* Raleway_Medium_Tracked.ttf */, + EC4C430A1A30953D00A82D8D /* Raleway_Regular_Tracked.ttf */, + ); + name = Resource; + sourceTree = ""; + }; + EC73E72A1A38381500E6823E /* View */ = { + isa = PBXGroup; + children = ( + EC4C42F71A2EFB3E00A82D8D /* HabitTableViewCell.h */, + EC4C42F81A2EFB3E00A82D8D /* HabitTableViewCell.m */, + EC4C43001A2F254E00A82D8D /* TimeLineView.h */, + EC4C43011A2F254E00A82D8D /* TimeLineView.m */, + EC73E71F1A35C7AD00E6823E /* InnerShadowView.h */, + EC73E7201A35C7AD00E6823E /* InnerShadowView.m */, + EC73E7221A35CA0900E6823E /* CellActionView.h */, + EC73E7231A35CA0900E6823E /* CellActionView.m */, + ); + name = View; + sourceTree = ""; + }; + EC73E72B1A38383000E6823E /* Controller */ = { + isa = PBXGroup; + children = ( + EC4C42F41A2EEE6200A82D8D /* HabitTableViewController.h */, + EC4C42F51A2EEE6200A82D8D /* HabitTableViewController.m */, + EC4C42FA1A2EFE0F00A82D8D /* HabitTableCellViewController.h */, + EC4C42FB1A2EFE0F00A82D8D /* HabitTableCellViewController.m */, + EC73E7301A383B7400E6823E /* AddHabitViewController.h */, + EC73E7311A383B7400E6823E /* AddHabitViewController.m */, + EC73E7321A383B7400E6823E /* AddHabitViewController.xib */, + ); + name = Controller; + sourceTree = ""; + }; + EC73E72C1A38384D00E6823E /* CoreBiz */ = { + isa = PBXGroup; + children = ( + EC73E7251A35D15100E6823E /* HabitBiz.h */, + EC73E7261A35D15100E6823E /* HabitBiz.m */, + ); + name = CoreBiz; + sourceTree = ""; + }; + EF4B7C91BCFB7136CCB08CE8 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 4999720AA74C0E5AD0D5903C /* libPods-iHabit.a */, + FE5D40FCFC579DA59F6D2237 /* libPods-iHabitTests.a */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + EC55A2881A2C2D3E00488D4C /* iHabit */ = { + isa = PBXNativeTarget; + buildConfigurationList = EC55A2AC1A2C2D3E00488D4C /* Build configuration list for PBXNativeTarget "iHabit" */; + buildPhases = ( + 5D8688A2CF83CF37104E9575 /* Check Pods Manifest.lock */, + EC55A2851A2C2D3E00488D4C /* Sources */, + EC55A2861A2C2D3E00488D4C /* Frameworks */, + EC55A2871A2C2D3E00488D4C /* Resources */, + 12706CB5999595FF76321234 /* Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = iHabit; + productName = iHabit; + productReference = EC55A2891A2C2D3E00488D4C /* iHabit.app */; + productType = "com.apple.product-type.application"; + }; + EC55A2A11A2C2D3E00488D4C /* iHabitTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = EC55A2AF1A2C2D3E00488D4C /* Build configuration list for PBXNativeTarget "iHabitTests" */; + buildPhases = ( + 63ED9AE7BF250DF690224151 /* Check Pods Manifest.lock */, + EC55A29E1A2C2D3E00488D4C /* Sources */, + EC55A29F1A2C2D3E00488D4C /* Frameworks */, + EC55A2A01A2C2D3E00488D4C /* Resources */, + D19B6EFFC9FECB9B00BE0BD4 /* Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + EC55A2A41A2C2D3E00488D4C /* PBXTargetDependency */, + ); + name = iHabitTests; + productName = iHabitTests; + productReference = EC55A2A21A2C2D3E00488D4C /* iHabitTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + EC55A2811A2C2D3E00488D4C /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0610; + ORGANIZATIONNAME = lzh; + TargetAttributes = { + EC55A2881A2C2D3E00488D4C = { + CreatedOnToolsVersion = 6.1; + }; + EC55A2A11A2C2D3E00488D4C = { + CreatedOnToolsVersion = 6.1; + TestTargetID = EC55A2881A2C2D3E00488D4C; + }; + }; + }; + buildConfigurationList = EC55A2841A2C2D3E00488D4C /* Build configuration list for PBXProject "iHabit" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = EC55A2801A2C2D3E00488D4C; + productRefGroup = EC55A28A1A2C2D3E00488D4C /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + EC55A2881A2C2D3E00488D4C /* iHabit */, + EC55A2A11A2C2D3E00488D4C /* iHabitTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + EC55A2871A2C2D3E00488D4C /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EC5A19511A3D835C00BA8092 /* LaunchScreen.xib in Resources */, + EC4C430B1A30953D00A82D8D /* Raleway_Medium_Tracked.ttf in Resources */, + EC4C430C1A30953D00A82D8D /* Raleway_Regular_Tracked.ttf in Resources */, + EC5A19521A3D835C00BA8092 /* Main.storyboard in Resources */, + EC55A29A1A2C2D3E00488D4C /* Images.xcassets in Resources */, + EC73E7341A383B7400E6823E /* AddHabitViewController.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EC55A2A01A2C2D3E00488D4C /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 12706CB5999595FF76321234 /* Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-iHabit/Pods-iHabit-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 5D8688A2CF83CF37104E9575 /* Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + 63ED9AE7BF250DF690224151 /* Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + D19B6EFFC9FECB9B00BE0BD4 /* Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-iHabitTests/Pods-iHabitTests-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + EC55A2851A2C2D3E00488D4C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EC4C42E61A2EDAEA00A82D8D /* iHabitDB.xcdatamodeld in Sources */, + EC55A2951A2C2D3E00488D4C /* ViewController.m in Sources */, + EC73E7271A35D15100E6823E /* HabitBiz.m in Sources */, + EC73E7331A383B7400E6823E /* AddHabitViewController.m in Sources */, + EC4C43121A31A3D000A82D8D /* Habit.m in Sources */, + EC4C42FC1A2EFE0F00A82D8D /* HabitTableCellViewController.m in Sources */, + EC4C42EA1A2EE35700A82D8D /* HistoryPeriod.m in Sources */, + EC55A2921A2C2D3E00488D4C /* AppDelegate.m in Sources */, + EC4C42F61A2EEE6200A82D8D /* HabitTableViewController.m in Sources */, + EC4C42EE1A2EE35800A82D8D /* HistoryAction.m in Sources */, + EC55A28F1A2C2D3E00488D4C /* main.m in Sources */, + EC73E7211A35C7AD00E6823E /* InnerShadowView.m in Sources */, + EC4C42F91A2EFB3E00A82D8D /* HabitTableViewCell.m in Sources */, + EC73E7241A35CA0900E6823E /* CellActionView.m in Sources */, + EC4C43021A2F254E00A82D8D /* TimeLineView.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EC55A29E1A2C2D3E00488D4C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EC4C42E71A2EDAEA00A82D8D /* iHabitDB.xcdatamodeld in Sources */, + EC55A2A91A2C2D3E00488D4C /* iHabitTests.m in Sources */, + EC4C42EF1A2EE35800A82D8D /* HistoryAction.m in Sources */, + EC4C42EB1A2EE35700A82D8D /* HistoryPeriod.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + EC55A2A41A2C2D3E00488D4C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = EC55A2881A2C2D3E00488D4C /* iHabit */; + targetProxy = EC55A2A31A2C2D3E00488D4C /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + EC5A194D1A3D835C00BA8092 /* LaunchScreen.xib */ = { + isa = PBXVariantGroup; + children = ( + EC5A194E1A3D835C00BA8092 /* Base */, + ); + name = LaunchScreen.xib; + sourceTree = ""; + }; + EC5A194F1A3D835C00BA8092 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + EC5A19501A3D835C00BA8092 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + EC55A2AA1A2C2D3E00488D4C /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.1; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + EC55A2AB1A2C2D3E00488D4C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.1; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + EC55A2AD1A2C2D3E00488D4C /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 74883FFA65CCAA515622A0F1 /* Pods-iHabit.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_FILE = iHabit/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + EC55A2AE1A2C2D3E00488D4C /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 60C7E73AA0F2F43CD917A9E6 /* Pods-iHabit.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_FILE = iHabit/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; + EC55A2B01A2C2D3E00488D4C /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D12863C1136CBB00C1307621 /* Pods-iHabitTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = iHabitTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/iHabit.app/iHabit"; + }; + name = Debug; + }; + EC55A2B11A2C2D3E00488D4C /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5780C07F6DD8995732F7D1FF /* Pods-iHabitTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + INFOPLIST_FILE = iHabitTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/iHabit.app/iHabit"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + EC55A2841A2C2D3E00488D4C /* Build configuration list for PBXProject "iHabit" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EC55A2AA1A2C2D3E00488D4C /* Debug */, + EC55A2AB1A2C2D3E00488D4C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + EC55A2AC1A2C2D3E00488D4C /* Build configuration list for PBXNativeTarget "iHabit" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EC55A2AD1A2C2D3E00488D4C /* Debug */, + EC55A2AE1A2C2D3E00488D4C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + EC55A2AF1A2C2D3E00488D4C /* Build configuration list for PBXNativeTarget "iHabitTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EC55A2B01A2C2D3E00488D4C /* Debug */, + EC55A2B11A2C2D3E00488D4C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCVersionGroup section */ + EC4C42E41A2EDAEA00A82D8D /* iHabitDB.xcdatamodeld */ = { + isa = XCVersionGroup; + children = ( + EC4C42E51A2EDAEA00A82D8D /* iHabitDB.xcdatamodel */, + ); + currentVersion = EC4C42E51A2EDAEA00A82D8D /* iHabitDB.xcdatamodel */; + path = iHabitDB.xcdatamodeld; + sourceTree = ""; + versionGroupType = wrapper.xcdatamodel; + }; +/* End XCVersionGroup section */ + }; + rootObject = EC55A2811A2C2D3E00488D4C /* Project object */; +} diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.h" new file mode 100644 index 00000000..829b3a10 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.h" @@ -0,0 +1,23 @@ +// +// AddHabitViewController.h +// iHabit +// +// Created by 陆钟豪 on 14/12/10. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import + +@interface AddHabitViewController : UIViewController + +@property (weak, nonatomic) IBOutlet UITextField *habitTitleTextField; +@property (weak, nonatomic) IBOutlet UIPickerView *periodTimesPicker; + +- (IBAction)addHabit:(id)sender; + +@end + + +@interface PeriodTimesPickerViewController : UIViewController + +@end \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.m" new file mode 100644 index 00000000..54274db6 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.m" @@ -0,0 +1,91 @@ +// +// AddHabitViewController.m +// iHabit +// +// Created by 陆钟豪 on 14/12/10. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import "AddHabitViewController.h" +#import "HabitBiz.h" + +@interface AddHabitViewController () + +@end + +@implementation AddHabitViewController { + HabitBiz* _habitBiz; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + _habitBiz = [HabitBiz getInstance]; + PeriodTimesPickerViewController *periodTimesPickerViewController = [[PeriodTimesPickerViewController alloc] init]; + periodTimesPickerViewController.view = _periodTimesPicker; + [periodTimesPickerViewController viewDidLoad]; + _periodTimesPicker.dataSource = periodTimesPickerViewController; + _periodTimesPicker.delegate = periodTimesPickerViewController; + [self addChildViewController:periodTimesPickerViewController]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +- (IBAction)addHabit:(id)sender { + [_habitBiz saveHabitWithTitle: self.habitTitleTextField.text + iconKey: @"" period:[_periodTimesPicker selectedRowInComponent:0] + times: [NSNumber numberWithInteger:[_periodTimesPicker selectedRowInComponent:1] + 1]]; + [self.navigationController popViewControllerAnimated:YES]; +} + + +@end + +@implementation PeriodTimesPickerViewController +{ + NSArray *_periodTitleArray; + NSArray *_timesTitleArray; +} + +-(void)viewDidLoad { + _periodTitleArray = [NSArray arrayWithObjects:@"Day", @"Week", @"Month", @"Year", nil]; + _timesTitleArray = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", @"5", @"6", @"7",nil]; +} + + +- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { + return 2; +} + +- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{ + switch (component) { + case 0: + return [_periodTitleArray count]; + case 1: + return [_timesTitleArray count]; + default: + return 0; + } +} + +-(NSString *)pickerView:(UIPickerView *)pickerView + titleForRow:(NSInteger)row + forComponent:(NSInteger)component { + switch (component) { + case 0: + return [_periodTitleArray objectAtIndex:row]; + case 1: + return [_timesTitleArray objectAtIndex:row]; + default: + return @""; + } +} + +-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ + +} + + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.xib" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.xib" new file mode 100644 index 00000000..60d5ed82 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.xib" @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AppDelegate.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AppDelegate.m" index 18e05506..40b5cd25 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AppDelegate.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AppDelegate.m" @@ -8,6 +8,8 @@ #import "AppDelegate.h" #import +#import "HabitTableViewController.h" +#import "AddHabitViewController.h" @interface AppDelegate () @@ -19,6 +21,17 @@ @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. [MagicalRecord setupCoreDataStackWithStoreNamed: @"iHabitDB.sqlite"]; + + _window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bounds]]; + _window.backgroundColor = UIColor.whiteColor; + + + HabitTableViewController *habitTableViewController = [[HabitTableViewController alloc] initWithStyle:UITableViewStylePlain]; + UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:habitTableViewController]; + _window.rootViewController = navigationController; + + [_window makeKeyAndVisible]; + return YES; } diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Base.lproj/LaunchScreen.xib" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Base.lproj/LaunchScreen.xib" index 683d0930..d57f1966 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Base.lproj/LaunchScreen.xib" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Base.lproj/LaunchScreen.xib" @@ -1,7 +1,7 @@ - + - + diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/CellActionView.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/CellActionView.h" new file mode 100644 index 00000000..184ffa47 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/CellActionView.h" @@ -0,0 +1,14 @@ +// +// CellActionView.h +// iHabit +// +// Created by 陆钟豪 on 14/12/8. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import +#import "InnerShadowView.h" + +@interface CellActionView : InnerShadowView + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/CellActionView.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/CellActionView.m" new file mode 100644 index 00000000..8f6cd5e2 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/CellActionView.m" @@ -0,0 +1,20 @@ +// +// CellActionView.m +// iHabit +// +// Created by 陆钟豪 on 14/12/8. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import "CellActionView.h" + +@implementation CellActionView + + +- (void)drawRect:(CGRect)rect { + CGContextRef context = UIGraphicsGetCurrentContext(); + CGPathRef path = [UIBezierPath bezierPathWithRect:self.bounds].CGPath; + [self drawInnerShadowInContext:context withPath:path shadowColor:UIColor.blackColor.CGColor offset:CGSizeMake(0, 0) blurRadius:5.0f]; +} + +@end \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Habit.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Habit.h" index 38f7308e..426d0ffa 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Habit.h" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Habit.h" @@ -2,7 +2,7 @@ // Habit.h // iHabit // -// Created by 陆钟豪 on 14/12/3. +// Created by 陆钟豪 on 14/12/5. // Copyright (c) 2014年 lzh. All rights reserved. // @@ -10,16 +10,33 @@ #import +typedef NS_ENUM(NSInteger, HabitPeriod) { // 习惯周期 + HabitPeriodDay = 0, + HabitPeriodWeek, + HabitPeriodMonth, + HabitPeriodYear +}; + @interface Habit : NSManagedObject -@property (nonatomic, retain) NSDate * createTime; +// 标题 @property (nonatomic, retain) NSString * title; +// 图标Key +@property (nonatomic, retain) NSString * iconKey; +// 周期 @property (nonatomic, retain) NSNumber * period; +// 次数 @property (nonatomic, retain) NSNumber * times; -@property (nonatomic, retain) NSString * icon; -@property (nonatomic, retain) NSDate * doTime; -@property (nonatomic, retain) NSDate * postponeTime; + +@property (nonatomic, retain) NSDate * createTime; @property (nonatomic, retain) NSDate * nextDoTime; -@property (nonatomic, retain) NSDate * periodEndTime; +@property (nonatomic, retain) NSDate * nextPeriodBeginTime; +@property (nonatomic, retain) NSDate * doTime; +@property (nonatomic, retain) NSDate * skipTime; + +// 本周期剩余次数 +@property (nonatomic, retain) NSNumber * surplusTimes; + +-(NSDate *)lastActionTime; @end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Habit.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Habit.m" index abf857c9..c545a941 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Habit.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Habit.m" @@ -2,7 +2,7 @@ // Habit.m // iHabit // -// Created by 陆钟豪 on 14/12/3. +// Created by 陆钟豪 on 14/12/5. // Copyright (c) 2014年 lzh. All rights reserved. // @@ -11,14 +11,21 @@ @implementation Habit -@dynamic createTime; @dynamic title; +@dynamic iconKey; @dynamic period; @dynamic times; -@dynamic icon; +@dynamic createTime; @dynamic doTime; -@dynamic postponeTime; +@dynamic skipTime; @dynamic nextDoTime; -@dynamic periodEndTime; +@dynamic nextPeriodBeginTime; +@dynamic surplusTimes; + +-(NSDate *)lastActionTime { + return [NSDate dateWithTimeIntervalSince1970:fmax(fmax([self.createTime timeIntervalSince1970], + self.doTime == nil ? 0 :[self.doTime timeIntervalSince1970]), + self.skipTime == nil ? 0 :[self.skipTime timeIntervalSince1970])]; +} @end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBiz.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBiz.h" new file mode 100644 index 00000000..fa135a4c --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBiz.h" @@ -0,0 +1,21 @@ +// +// HabitBiz.h +// iHabit +// +// Created by 陆钟豪 on 14/12/8. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import +#import "Habit.h" + +@interface HabitBiz : NSObject +@property (strong, nonatomic, readonly) NSArray* habitArray; + +-(NSInteger)done:(Habit*)habit; +-(NSInteger)skip:(Habit*)habit; +-(Habit*)saveHabitWithTitle:(NSString*)title iconKey:(NSString*)iconKey period:(HabitPeriod)period times:(NSNumber*)times; + ++(HabitBiz*)getInstance; + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBiz.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBiz.m" new file mode 100644 index 00000000..5ba2a2ac --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBiz.m" @@ -0,0 +1,125 @@ +// +// HabitBiz.m +// iHabit +// +// Created by 陆钟豪 on 14/12/8. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import "HabitBiz.h" +#import "Habit.h" +#import "math.h" +#import + +@implementation HabitBiz + +-(instancetype)init { + self = [super init]; + _habitArray = [Habit MR_findAll]; + _habitArray = [HabitBiz sortHabit:_habitArray]; // 排序 + return self; +} + +-(Habit*)saveHabitWithTitle:(NSString*)title iconKey:(NSString*)iconKey period:(HabitPeriod)period times:(NSNumber*)times { + NSDate *nowDate = [NSDate date]; + NSCalendar *cal = [NSCalendar currentCalendar]; //日历 + + Habit *newHabit = [Habit MR_createEntity]; + newHabit.title = title; + newHabit.period = [NSNumber numberWithInteger:period]; + newHabit.times = times; + newHabit.iconKey = iconKey; + newHabit.createTime = nowDate; + // 计算periodEndTime + newHabit.nextPeriodBeginTime = [HabitBiz calculateNextPeriodBeginTimeWithBeginTime:nowDate period:period]; + // 计算nextDoTime + if(period == HabitPeriodDay) { + NSTimeInterval interval = (NSTimeInterval)(24 * 60 * 60) / [newHabit.times integerValue]; + NSDate *dayBeginTime = [cal dateFromComponents:[cal components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:nowDate]]; + newHabit.nextDoTime = [cal dateByAddingUnit:NSCalendarUnitSecond value:interval / 2 toDate:dayBeginTime options:0]; + newHabit.surplusTimes = times; + while([newHabit.nextDoTime timeIntervalSinceDate:nowDate] < 0) { + newHabit.surplusTimes = [NSNumber numberWithInteger:[newHabit.surplusTimes integerValue] - 1]; + newHabit.nextDoTime = [cal dateByAddingUnit:NSCalendarUnitSecond value:interval toDate:newHabit.nextDoTime options:0]; + } + } + else { + NSTimeInterval surplusTimeInterval = [newHabit.nextPeriodBeginTime timeIntervalSinceDate:nowDate]; + newHabit.nextDoTime = [cal dateByAddingUnit:NSCalendarUnitSecond value:surplusTimeInterval / [newHabit.times integerValue] toDate:nowDate options:0]; + newHabit.surplusTimes = times; + } + newHabit.doTime = nil; + newHabit.skipTime = nil; + _habitArray = [Habit MR_findAll]; + _habitArray = [HabitBiz sortHabit:_habitArray]; // 排序 + [[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait]; //持久化 + return newHabit; +} + ++(NSDate*)calculateNextPeriodBeginTimeWithBeginTime:(NSDate*)beginTime period:(HabitPeriod)period{ + NSCalendar *cal = [NSCalendar currentCalendar]; + NSDateComponents *dateComps = [cal components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:beginTime];// 获取当前年月日date components,时间单元掩码:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay + NSDate *dayBeginTime; + NSDate *nextPeriodBeginTime; + dayBeginTime = [cal dateFromComponents:dateComps]; //截取时分秒 + switch (period) { + case HabitPeriodDay: + nextPeriodBeginTime = [cal dateByAddingUnit:NSCalendarUnitDay value:1 toDate:dayBeginTime options:0]; + break; + case HabitPeriodWeek: + nextPeriodBeginTime = [cal dateByAddingUnit:NSCalendarUnitWeekday value:1 toDate:dayBeginTime options:0]; + break; + case HabitPeriodMonth: + nextPeriodBeginTime = [cal dateByAddingUnit:NSCalendarUnitMonth value:1 toDate:dayBeginTime options:0]; + break; + case HabitPeriodYear: + nextPeriodBeginTime = [cal dateByAddingUnit:NSCalendarUnitYear value:1 toDate:dayBeginTime options:0]; + break; + default: + break; + } + return nextPeriodBeginTime; +} + +-(NSInteger)done:(Habit*)habit { + NSDate *nowDate = [NSDate date]; + habit.doTime = nowDate; + habit.surplusTimes = [NSNumber numberWithInteger:[habit.surplusTimes integerValue] - 1]; + _habitArray = [HabitBiz sortHabit:_habitArray]; // 排序 + [[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait]; //持久化 + return [_habitArray indexOfObject:habit]; +} + +-(NSInteger)skip:(Habit*)habit { + NSDate *nowDate = [NSDate date]; + habit.skipTime = nowDate; + habit.surplusTimes = [NSNumber numberWithInteger:[habit.surplusTimes integerValue] - 1]; + _habitArray = [HabitBiz sortHabit:_habitArray]; // 排序 + [[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait]; //持久化 + return [_habitArray indexOfObject:habit]; +} + ++(NSArray*)sortHabit:(NSArray*)habitArray { + // FIXME changeing NSArray to NSMutableArray is better + // FIXME store sorted array is better + return [habitArray sortedArrayUsingComparator:^(id a, id b) { + Habit *habitA = (Habit*)a; + Habit *habitB = (Habit*)b; + NSDate *lastActionTimeA = [habitA lastActionTime]; + NSDate *lastActionTimeB = [habitB lastActionTime]; + if(lastActionTimeA.timeIntervalSince1970 < lastActionTimeB.timeIntervalSince1970) + return (NSComparisonResult)NSOrderedAscending; + else if(lastActionTimeA.timeIntervalSince1970 > lastActionTimeB.timeIntervalSince1970) + return (NSComparisonResult)NSOrderedDescending; + else + return (NSComparisonResult)NSOrderedSame; + }]; +} + ++(HabitBiz*)getInstance { + static HabitBiz *instance = nil; + if(instance == nil) + instance = [[HabitBiz alloc] init]; + return instance; +} +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableCellViewController.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableCellViewController.h" new file mode 100644 index 00000000..bdbddb7b --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableCellViewController.h" @@ -0,0 +1,17 @@ +// +// HabitTableCellViewController.h +// iHabit +// +// Created by 陆钟豪 on 14/12/3. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import +#import "HabitTableViewCell.h" + +@interface HabitTableCellViewController : UIViewController + +@property CGFloat offsetMinX, offsetMaxX; +@property (weak, nonatomic) TimeLineView *timeLineView; + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableCellViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableCellViewController.m" new file mode 100644 index 00000000..c85ba351 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableCellViewController.m" @@ -0,0 +1,173 @@ +// +// HabitTableCellViewController.m +// iHabit +// +// Created by 陆钟豪 on 14/12/3. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import "HabitTableCellViewController.h" +#import "TimeLineView.h" +#import "math.h" +#import "CellActionView.h" +#import "HabitBiz.h" +#import "HabitTableViewCell.h" + +@interface HabitTableCellViewController () + +@end + +@implementation HabitTableCellViewController{ + CGPoint _touchBeginPoint; + BOOL _isTouchBegin; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + HabitTableViewCell *cell = (HabitTableViewCell*) super.view; + + TimeLineView *timeLine = [[TimeLineView alloc] initWithFrame:CGRectMake(67, 50, 242, 30)]; + timeLine.color = UIColor.blueColor; + timeLine.backgroundColor = UIColor.clearColor; + [cell.contentView addSubview:timeLine]; + self.timeLineView = timeLine; + + UIView *doneAction = [[CellActionView alloc] initWithFrame:CGRectMake(-100, 0, 100, 80)]; + doneAction.backgroundColor = UIColor.greenColor; + [cell.contentView addSubview:doneAction]; + + UIView *skipAction = [[CellActionView alloc] initWithFrame:CGRectMake(320, 0, 100, 80)]; + skipAction.backgroundColor = UIColor.blueColor; + [cell.contentView addSubview:skipAction]; + + cell.contentView.layer.masksToBounds = NO; + + cell.textLabel.font = [UIFont fontWithName:@"Raleway-Tracked" size:22]; + cell.contentView.backgroundColor = UIColor.whiteColor; + + [cell addObserver:self forKeyPath:@"habit" options:0 context:nil]; + + self.offsetMinX = -100; + self.offsetMaxX = 100; +} + +-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { + HabitTableViewCell *cell = (HabitTableViewCell*) self.view; + Habit *habit = cell.habit; + + // observe self.view(cell view).habit + if([keyPath isEqualToString:@"habit"]){ + // FIXME should I remove these observer?? +// [habit addObserver:self forKeyPath:@"title" options:0 context:nil]; +// [habit addObserver:self forKeyPath:@"iconKey" options:0 context:nil]; +// [habit addObserver:self forKeyPath:@"period" options:0 context:nil]; +// [habit addObserver:self forKeyPath:@"times" options:0 context:nil]; +// [habit addObserver:self forKeyPath:@"createTime" options:0 context:nil]; +// [habit addObserver:self forKeyPath:@"nextDoTime" options:0 context:nil]; +// [habit addObserver:self forKeyPath:@"nextPeriodBeginTime" options:0 context:nil]; +// [habit addObserver:self forKeyPath:@"doTime" options:0 context:nil]; +// [habit addObserver:self forKeyPath:@"skipTime" options:0 context:nil]; +// [habit addObserver:self forKeyPath:@"surplusTimes" options:0 context:nil]; + + cell.textLabel.text = habit.title; + cell.imageView.image = [UIImage imageNamed:@"start"]; + + NSDate *nowDate = [NSDate date]; + if([habit.nextDoTime timeIntervalSinceDate:nowDate] > 0) { + NSDate *lastActionTime = habit.lastActionTime; + self.timeLineView.progressRatio = [nowDate timeIntervalSinceDate:lastActionTime] / [habit.nextDoTime timeIntervalSinceDate:lastActionTime]; + } + else{ + self.timeLineView.progressRatio = 1.0; + } + + } +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { + UITouch *touch = [touches anyObject]; + _touchBeginPoint = [touch locationInView:self.view]; + _isTouchBegin = YES; +} + +-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { + if(!_isTouchBegin) return; + UITouch *touch = [touches anyObject]; + CGPoint touchPoint = [touch locationInView:self.view]; + CGFloat offsetX = touchPoint.x - _touchBeginPoint.x; + offsetX = fmaxf(offsetX, self.offsetMinX); + offsetX = fminf(offsetX, self.offsetMaxX); + HabitTableViewCell *cell = (HabitTableViewCell*)(self.view); + UIView *cellContentView = cell.contentView; + cellContentView.frame = CGRectMake(offsetX, + cellContentView.frame.origin.y, + cellContentView.frame.size.width, + cellContentView.frame.size.height); + NSInteger afterActionIndex; + if(offsetX == self.offsetMinX) + afterActionIndex = [[HabitBiz getInstance]skip:cell.habit]; + else if(offsetX == self.offsetMaxX) + afterActionIndex = [[HabitBiz getInstance]done:cell.habit]; + else + return; + + cell.habit = cell.habit; //刷新 + + UITableView *tableView = ((UITableViewController*)self.parentViewController).tableView; + _isTouchBegin = NO; + + [UIView animateKeyframesWithDuration:.5 delay:0.0 options:UIViewKeyframeAnimationOptionCalculationModeLinear animations:^{ + [UIView addKeyframeWithRelativeStartTime:0.0 relativeDuration:0.5 animations:^{ + + cell.layer.transform = CATransform3DRotate(cell.layer.transform, -M_PI/2, 1.0f, 0.0f, 0.0f); + }]; + + [UIView addKeyframeWithRelativeStartTime:0.5 relativeDuration:0.0 animations:^{ + cell.layer.transform = CATransform3DRotate(cell.layer.transform, M_PI, 1.0f, 0.0f, 0.0f); + cellContentView.frame = CGRectMake(0, + cellContentView.frame.origin.y, + cellContentView.frame.size.width, + cellContentView.frame.size.height); + }]; + + [UIView addKeyframeWithRelativeStartTime:0.5 relativeDuration:0.5 animations:^{ + cell.layer.transform = CATransform3DRotate(cell.layer.transform, -M_PI/2, 1.0f, 0.0f, 0.0f); + }]; + } completion:^(BOOL finished){ + [tableView moveRowAtIndexPath:[tableView indexPathForCell:cell] toIndexPath:[NSIndexPath indexPathForRow:afterActionIndex inSection:0]]; + }]; + +} + + + +-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { + UIView *cellContentView = ((UITableViewCell*)(self.view)).contentView; + [UIView animateWithDuration:0.3f delay:0.0f options:UIViewAnimationOptionCurveEaseInOut animations:^{ + cellContentView.frame = CGRectMake(0, + cellContentView.frame.origin.y, + cellContentView.frame.size.width, + cellContentView.frame.size.height); + } completion:nil]; +} + +-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { + UIView *cellContentView = ((UITableViewCell*)(self.view)).contentView; + [UIView animateWithDuration:0.3f delay:0.0f options:UIViewAnimationOptionCurveEaseInOut animations:^{ + cellContentView.frame = CGRectMake(0, + cellContentView.frame.origin.y, + cellContentView.frame.size.width, + cellContentView.frame.size.height); + } completion:nil]; +} + +-(void)dealloc { + [self.view removeObserver:self forKeyPath:@"habit"]; +} + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewCell.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewCell.h" new file mode 100644 index 00000000..e837921d --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewCell.h" @@ -0,0 +1,18 @@ +// +// HabitTableCellView.h +// iHabit +// +// Created by 陆钟豪 on 14/12/3. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import +#import "Habit.h" +#import "TimeLineView.h" + +@interface HabitTableViewCell : UITableViewCell + +@property (weak, nonatomic) UIColor *cellColor; +@property (weak, nonatomic) Habit *habit; + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewCell.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewCell.m" new file mode 100644 index 00000000..de210bb3 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewCell.m" @@ -0,0 +1,34 @@ +// +// HabitTableCellView.m +// iHabit +// +// Created by 陆钟豪 on 14/12/3. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import "HabitTableViewCell.h" +#import "TimeLineView.h" + +@implementation HabitTableViewCell + +-(void)layoutSubviews { + [super layoutSubviews]; + self.imageView.frame = CGRectMake(15, 24, 32, 32); + self.textLabel.frame = CGRectMake(63.5, 22, self.textLabel.frame.size.width, self.textLabel.frame.size.height); + self.textLabel.backgroundColor = UIColor.clearColor; +} + +-(void)setHabit:(Habit *)habit { + + self.textLabel.text = habit.title; + self.imageView.image = [UIImage imageNamed:@"start"]; + _habit = habit; +} + +-(Habit *)Habit { + return _habit; +} + + + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewController.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewController.h" new file mode 100644 index 00000000..a0df416c --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewController.h" @@ -0,0 +1,14 @@ +// +// HabitTableViewController.h +// iHabit +// +// Created by 陆钟豪 on 14/12/3. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import +#import "Habit.h" + +@interface HabitTableViewController : UITableViewController + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewController.m" new file mode 100644 index 00000000..ce5527fd --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewController.m" @@ -0,0 +1,88 @@ +// +// HabitTableViewController.m +// iHabit +// +// Created by 陆钟豪 on 14/12/3. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import "HabitTableViewController.h" +#import "Habit.h" +#import "HabitTableViewCell.h" +#import "HabitTableCellViewController.h" +#import "CellActionView.h" +#import "HabitBiz.h" +#import "AddHabitViewController.h" +#import + +@interface HabitTableViewController () + +@end + +@implementation HabitTableViewController{ + HabitBiz* _habitBiz; +} + +-(void)scrollViewDidScroll:(UIScrollView *)scrollView { + if(self.tableView.contentOffset.y <= -150) { + [self.navigationController pushViewController:[[AddHabitViewController alloc] initWithNibName:@"AddHabitViewController" bundle:nil] animated:YES]; + } +} + +-(void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + [self.tableView reloadData]; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // 隐藏分隔线 + self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + //这个标准默认为YES,如果设置为NO,这消息一旦传递给subView,这scroll事件不会再发生。 + self.tableView.canCancelContentTouches = NO; + //这个标志默认是YES,使用上面的150ms的timer,如果设置为NO,touch事件立即传递给subView,不会有150ms的等待。 + self.tableView.delaysContentTouches = NO; + UIView* tableHeader = [[CellActionView alloc] initWithFrame:CGRectMake(0, -200, 320, 200)]; + tableHeader.backgroundColor = UIColor.blueColor; + + self.tableView.delegate = self; + + _habitBiz = [HabitBiz getInstance]; + [self.tableView addSubview:tableHeader]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +#pragma mark - Table view data source + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return [_habitBiz.habitArray count]; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + static NSString * cellIdentifier = @"HabitCell"; + HabitTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; + if (cell == nil) { + cell = [[HabitTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier]; + HabitTableCellViewController *habitTableCellViewController = [[HabitTableCellViewController alloc] init]; + habitTableCellViewController.view = cell; + [habitTableCellViewController viewDidLoad]; + [self addChildViewController:habitTableCellViewController]; + } + NSInteger index = [indexPath row]; + Habit *habit = [_habitBiz.habitArray objectAtIndex:index]; + cell.habit = habit; + return cell; +} + + +-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + // 设置单元格高度 + return 80; +} + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/start.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/start.imageset/Contents.json" new file mode 100644 index 00000000..04187b50 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/start.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "star@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/start.imageset/star@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/start.imageset/star@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..2e69f9894d53a0791d27e4e927e2c2637d0c6b2a GIT binary patch literal 635 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(*%_z6EOC<})f92`o81iOXAaApSfQvhmkQO6*2p3-z`-26OCN#86 zJYbno|4rx;!@`0K_x#Ln#`k?sD`NQbe0A`RQ-0anv;QSTuUPhfOK#}pekL|k#_xhP zccMHQ)L8;p_swgVp2aB65@1=|DOS+Rptbz{F4jK|3{x+c-(<=YaCrJ9c58z*NLpMs zfr&B1&;GR76oyqUFZ-hdZf>sU+Qj&Q;esk#obr;*n`bY667%Mux%HEr6MKuKs=uF# zNP8~3={!Tx>uF?^wX~KGf;Pr}+Qdg(n72TB zOTAt|OV?V%_p){z9F9fro!_ep-V9e(THUc{PTy6VIg`RUT+dXu23*-=&M|$)cc#RB zmukWUCQiKYCu3`f=z>z6~lfh;pgA!vy2aACKgTw>| zH6{jOA%@d-3`(j@3(9>PY@%2i=5aXe$!2nxoS?`QV9V(>hcPWXF6;cdb1YStDt<3r zc`k0!0_}`FA{~9EjMwaUm24=l+gbPerjUX(zk2oAKmq1prXz=ZHDxR+^|qd|FYEF! ztABcnb1n;)L7j-pRF#g||M@Caujc#;oT^*6$u+cMNm%fzuRk|-?KJb-%Xr4JBo3G= O7(8A5T-G@yGywn)HS%Qu literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Info.plist" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Info.plist" index b84c2864..23e44170 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Info.plist" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Info.plist" @@ -36,6 +36,11 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight + UIAppFonts + + Raleway_Regular_Tracked.ttf + Raleway_Medium_Tracked.ttf + UISupportedInterfaceOrientations~ipad UIInterfaceOrientationPortrait diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/InnerShadowView.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/InnerShadowView.h" new file mode 100644 index 00000000..ff361bed --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/InnerShadowView.h" @@ -0,0 +1,20 @@ +// +// InnerShadowView.h +// iHabit +// +// Created by 陆钟豪 on 14/12/8. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import + +@interface InnerShadowView : UIView + +- (void)drawInnerShadowInContext:(CGContextRef)context + withPath:(CGPathRef)path + shadowColor:(CGColorRef)shadowColor + offset:(CGSize)offset + blurRadius:(CGFloat)blurRadius ; + + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/InnerShadowView.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/InnerShadowView.m" new file mode 100644 index 00000000..bf78ce8a --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/InnerShadowView.m" @@ -0,0 +1,46 @@ +// +// InnerShadowView.m +// iHabit +// +// Created by 陆钟豪 on 14/12/8. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import "InnerShadowView.h" + +@implementation InnerShadowView + +/* +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect { + // Drawing code +} +*/ +- (void)drawInnerShadowInContext:(CGContextRef)context + withPath:(CGPathRef)path + shadowColor:(CGColorRef)shadowColor + offset:(CGSize)offset + blurRadius:(CGFloat)blurRadius { + CGContextSaveGState(context); + + CGContextAddPath(context, path); + CGContextClip(context); + + CGColorRef opaqueShadowColor = CGColorCreateCopyWithAlpha(shadowColor, 1.0); + + CGContextSetAlpha(context, CGColorGetAlpha(shadowColor)); + CGContextBeginTransparencyLayer(context, NULL); + CGContextSetShadowWithColor(context, offset, blurRadius, opaqueShadowColor); + CGContextSetBlendMode(context, kCGBlendModeSourceOut); + CGContextSetFillColorWithColor(context, opaqueShadowColor); + CGContextAddPath(context, path); + CGContextFillPath(context); + CGContextEndTransparencyLayer(context); + + CGContextRestoreGState(context); + + CGColorRelease(opaqueShadowColor); +} + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Raleway_Medium_Tracked.ttf" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Raleway_Medium_Tracked.ttf" new file mode 100755 index 0000000000000000000000000000000000000000..1a42fa167dac2c240451da415ef4ab1fd7cca62c GIT binary patch literal 59420 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 literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Raleway_Regular_Tracked.ttf" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Raleway_Regular_Tracked.ttf" new file mode 100755 index 0000000000000000000000000000000000000000..0a3c74d07c3109c1e3e4895e4237cb68d5a87140 GIT binary patch literal 59472 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 + +@interface TimeLineView : UIView + +@property UIColor *color; +@property NSString *tip; +@property float progressRatio; + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/TimeLineView.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/TimeLineView.m" new file mode 100644 index 00000000..56dda87c --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/TimeLineView.m" @@ -0,0 +1,66 @@ +// +// LineView.m +// iHabit +// +// Created by 陆钟豪 on 14/12/3. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import "TimeLineView.h" + +@implementation TimeLineView + +-(void)drawRect:(CGRect)rect { + CGContextRef context = UIGraphicsGetCurrentContext(); + const CGFloat beginX = 0.0f, maxEndX = 174.0f; + CGFloat centerY = rect.origin.y + (rect.size.height / 2); + const CGFloat lineWidth = 4.0f; + CGContextSetLineWidth(context, lineWidth); + CGContextSetLineCap(context, kCGLineCapRound); + CGContextSetLineJoin(context, kCGLineJoinRound); + CGContextSetStrokeColorWithColor(context, self.color.CGColor); + + CGFloat tipPostionX; + if(self.progressRatio < 1.0) + { + CGFloat currentEndX = beginX + (maxEndX - beginX) * self.progressRatio; + CGContextMoveToPoint(context, beginX + lineWidth / 2, centerY); + CGContextAddLineToPoint(context, currentEndX - lineWidth / 2, centerY); + CGContextStrokePath(context); + tipPostionX = currentEndX + 8.5; + } + else if(self.progressRatio == 1.0) + { + CGContextMoveToPoint(context, beginX + lineWidth / 2, centerY); + CGContextAddLineToPoint(context, maxEndX - lineWidth / 2, centerY); + + CGContextMoveToPoint(context, maxEndX - lineWidth / 2 - 6, centerY - 6); + CGContextAddLineToPoint(context, maxEndX - lineWidth / 2, centerY); + CGContextAddLineToPoint(context, maxEndX - lineWidth / 2 - 6, centerY + 6); + CGContextStrokePath(context); + + tipPostionX = maxEndX + 8.5; + } + else + { + CGContextMoveToPoint(context, beginX + lineWidth / 2, centerY); + CGContextAddLineToPoint(context, maxEndX - lineWidth / 2, centerY); + + CGContextMoveToPoint(context, maxEndX - lineWidth / 2 - 6, centerY - 6); + CGContextAddLineToPoint(context, maxEndX - lineWidth / 2, centerY); + CGContextAddLineToPoint(context, maxEndX - lineWidth / 2 - 6, centerY + 6); + + CGContextMoveToPoint(context, maxEndX - lineWidth / 2 + 1, centerY - 6); + CGContextAddLineToPoint(context, maxEndX - lineWidth / 2 + 7, centerY); + CGContextAddLineToPoint(context, maxEndX - lineWidth / 2 + 1, centerY + 6); + CGContextStrokePath(context); + + tipPostionX = maxEndX + 7 + 8.5; + } + + UIFont *font = [UIFont fontWithName:@"Raleway-Tracked" size:16.67]; + [self.tip drawAtPoint:CGPointMake(tipPostionX, centerY - 12) withAttributes:@{NSFontAttributeName:font}]; + +} + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/ViewController.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/ViewController.h" index c686a108..339cf908 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/ViewController.h" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/ViewController.h" @@ -11,5 +11,6 @@ @interface ViewController : UIViewController + @end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/iHabitDB.xcdatamodeld/iHabitDB.xcdatamodel/contents" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/iHabitDB.xcdatamodeld/iHabitDB.xcdatamodel/contents" index ed035303..4e192d83 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/iHabitDB.xcdatamodeld/iHabitDB.xcdatamodel/contents" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/iHabitDB.xcdatamodeld/iHabitDB.xcdatamodel/contents" @@ -3,11 +3,12 @@ - + + - - + + @@ -24,8 +25,8 @@ - - - + + + \ No newline at end of file From 8c1a963756679b562eebb340a0c691c2216147d0 Mon Sep 17 00:00:00 2001 From: varvelworld Date: Mon, 15 Dec 2014 16:24:28 +0800 Subject: [PATCH 09/19] dev Habit core biz --- .../iHabit/iHabit/HabitBiz.m" | 58 +++++++++++++-- .../iHabit/HabitTableCellViewController.m" | 74 +++++++++++++++---- .../iHabit/iHabit/HabitTableViewController.m" | 2 +- .../iHabit/iHabit/TimeLineView.m" | 4 +- 4 files changed, 113 insertions(+), 25 deletions(-) diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBiz.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBiz.m" index 5ba2a2ac..d30d73f1 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBiz.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBiz.m" @@ -30,14 +30,17 @@ -(Habit*)saveHabitWithTitle:(NSString*)title iconKey:(NSString*)iconKey period:( newHabit.times = times; newHabit.iconKey = iconKey; newHabit.createTime = nowDate; + // 计算periodEndTime - newHabit.nextPeriodBeginTime = [HabitBiz calculateNextPeriodBeginTimeWithBeginTime:nowDate period:period]; - // 计算nextDoTime + newHabit.nextPeriodBeginTime = [HabitBiz calculateNextPeriodBeginTimeWithTime:nowDate period:period]; + + newHabit.surplusTimes = times; + + // 计算nextDoTime FIXME 重复代码 if(period == HabitPeriodDay) { NSTimeInterval interval = (NSTimeInterval)(24 * 60 * 60) / [newHabit.times integerValue]; NSDate *dayBeginTime = [cal dateFromComponents:[cal components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:nowDate]]; newHabit.nextDoTime = [cal dateByAddingUnit:NSCalendarUnitSecond value:interval / 2 toDate:dayBeginTime options:0]; - newHabit.surplusTimes = times; while([newHabit.nextDoTime timeIntervalSinceDate:nowDate] < 0) { newHabit.surplusTimes = [NSNumber numberWithInteger:[newHabit.surplusTimes integerValue] - 1]; newHabit.nextDoTime = [cal dateByAddingUnit:NSCalendarUnitSecond value:interval toDate:newHabit.nextDoTime options:0]; @@ -45,8 +48,7 @@ -(Habit*)saveHabitWithTitle:(NSString*)title iconKey:(NSString*)iconKey period:( } else { NSTimeInterval surplusTimeInterval = [newHabit.nextPeriodBeginTime timeIntervalSinceDate:nowDate]; - newHabit.nextDoTime = [cal dateByAddingUnit:NSCalendarUnitSecond value:surplusTimeInterval / [newHabit.times integerValue] toDate:nowDate options:0]; - newHabit.surplusTimes = times; + newHabit.nextDoTime = [cal dateByAddingUnit:NSCalendarUnitSecond value:surplusTimeInterval / [newHabit.surplusTimes integerValue] toDate:nowDate options:0]; } newHabit.doTime = nil; newHabit.skipTime = nil; @@ -56,7 +58,7 @@ -(Habit*)saveHabitWithTitle:(NSString*)title iconKey:(NSString*)iconKey period:( return newHabit; } -+(NSDate*)calculateNextPeriodBeginTimeWithBeginTime:(NSDate*)beginTime period:(HabitPeriod)period{ ++(NSDate*)calculateNextPeriodBeginTimeWithTime:(NSDate*)beginTime period:(HabitPeriod)period{ NSCalendar *cal = [NSCalendar currentCalendar]; NSDateComponents *dateComps = [cal components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:beginTime];// 获取当前年月日date components,时间单元掩码:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay NSDate *dayBeginTime; @@ -83,8 +85,28 @@ +(NSDate*)calculateNextPeriodBeginTimeWithBeginTime:(NSDate*)beginTime period:(H -(NSInteger)done:(Habit*)habit { NSDate *nowDate = [NSDate date]; + + // 转到下个周期 FIXME 重复代码 + if([nowDate timeIntervalSinceDate:habit.nextPeriodBeginTime] > 0){ + habit.nextPeriodBeginTime = [HabitBiz calculateNextPeriodBeginTimeWithTime:nowDate period:[habit.period integerValue]]; + habit.surplusTimes = habit.times; + } + habit.doTime = nowDate; - habit.surplusTimes = [NSNumber numberWithInteger:[habit.surplusTimes integerValue] - 1]; + habit.surplusTimes = [NSNumber numberWithInt:(int)fmax([habit.surplusTimes integerValue] - 1, 0)]; //FIXME 减一,最小减到0 + NSCalendar *cal = [NSCalendar currentCalendar]; //日历 + + // 计算nextDoTime FIXME 重复代码 + if([habit.surplusTimes integerValue] == 0){ + NSDate *nextNextPeriodBeginTime = [HabitBiz calculateNextPeriodBeginTimeWithTime:habit.nextPeriodBeginTime period:[habit.period integerValue]]; + NSTimeInterval periodTimeInterval = [nextNextPeriodBeginTime timeIntervalSinceDate:habit.nextPeriodBeginTime]; + habit.nextDoTime = [cal dateByAddingUnit:NSCalendarUnitSecond value:periodTimeInterval / [habit.surplusTimes integerValue] toDate:habit.nextPeriodBeginTime options:0]; + } + else { + NSTimeInterval surplusTimeInterval = [habit.nextPeriodBeginTime timeIntervalSinceDate:nowDate]; // TODO + habit.nextDoTime = [cal dateByAddingUnit:NSCalendarUnitSecond value:surplusTimeInterval / [habit.surplusTimes integerValue] toDate:habit.nextPeriodBeginTime options:0]; + + } _habitArray = [HabitBiz sortHabit:_habitArray]; // 排序 [[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait]; //持久化 return [_habitArray indexOfObject:habit]; @@ -92,8 +114,28 @@ -(NSInteger)done:(Habit*)habit { -(NSInteger)skip:(Habit*)habit { NSDate *nowDate = [NSDate date]; + + // 转到下个周期 FIXME 重复代码 + if([nowDate timeIntervalSinceDate:habit.nextPeriodBeginTime] > 0) { + habit.nextPeriodBeginTime = [HabitBiz calculateNextPeriodBeginTimeWithTime:nowDate period:[habit.period integerValue]]; + habit.surplusTimes = habit.times; + } habit.skipTime = nowDate; - habit.surplusTimes = [NSNumber numberWithInteger:[habit.surplusTimes integerValue] - 1]; + // surplusTimes不变 + NSCalendar *cal = [NSCalendar currentCalendar]; //日历 + + // 计算nextDoTime FIXME 重复代码 + if([habit.surplusTimes integerValue] == 0){ + NSDate *nextNextPeriodBeginTime = [HabitBiz calculateNextPeriodBeginTimeWithTime:habit.nextPeriodBeginTime period:[habit.period integerValue]]; + NSTimeInterval periodTimeInterval = [nextNextPeriodBeginTime timeIntervalSinceDate:habit.nextPeriodBeginTime]; + habit.nextDoTime = [cal dateByAddingUnit:NSCalendarUnitSecond value:periodTimeInterval / [habit.surplusTimes integerValue] toDate:habit.nextPeriodBeginTime options:0]; + } + else { + NSTimeInterval surplusTimeInterval = [habit.nextPeriodBeginTime timeIntervalSinceDate:nowDate]; // TODO + habit.nextDoTime = [cal dateByAddingUnit:NSCalendarUnitSecond value:surplusTimeInterval / [habit.surplusTimes integerValue] toDate:habit.nextPeriodBeginTime options:0]; + + } + _habitArray = [HabitBiz sortHabit:_habitArray]; // 排序 [[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait]; //持久化 return [_habitArray indexOfObject:habit]; diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableCellViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableCellViewController.m" index c85ba351..927c63a5 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableCellViewController.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableCellViewController.m" @@ -45,10 +45,19 @@ - (void)viewDidLoad { cell.textLabel.font = [UIFont fontWithName:@"Raleway-Tracked" size:22]; cell.contentView.backgroundColor = UIColor.whiteColor; - [cell addObserver:self forKeyPath:@"habit" options:0 context:nil]; + [cell addObserver:self forKeyPath:@"habit" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil]; self.offsetMinX = -100; self.offsetMaxX = 100; + + [NSTimer scheduledTimerWithTimeInterval:1 // FIXME 1秒钟刷新一次是为了测试 + target:[NSBlockOperation blockOperationWithBlock:^{ + cell.habit = cell.habit; //刷新 + }] + selector:@selector(main) + userInfo:nil + repeats:YES + ]; } -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { @@ -56,8 +65,21 @@ -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NS Habit *habit = cell.habit; // observe self.view(cell view).habit - if([keyPath isEqualToString:@"habit"]){ - // FIXME should I remove these observer?? +// if([keyPath isEqualToString:@"habit"]){ +// Habit *oldHabit = [change valueForKey:NSKeyValueChangeOldKey]; +// if((NSNull *)oldHabit != [NSNull null]) { // NSNull坑死人啊! +// // FIXME should I remove these observer?? +// [oldHabit removeObserver:self forKeyPath:@"title"]; +// [oldHabit removeObserver:self forKeyPath:@"iconKey"]; +// [oldHabit removeObserver:self forKeyPath:@"period"]; +// [oldHabit removeObserver:self forKeyPath:@"times"]; +// [oldHabit removeObserver:self forKeyPath:@"createTime"]; +// [oldHabit removeObserver:self forKeyPath:@"nextDoTime"]; +// [oldHabit removeObserver:self forKeyPath:@"nextPeriodBeginTime"]; +// [oldHabit removeObserver:self forKeyPath:@"doTime"]; +// [oldHabit removeObserver:self forKeyPath:@"skipTime"]; +// [oldHabit removeObserver:self forKeyPath:@"surplusTimes"]; +// } // [habit addObserver:self forKeyPath:@"title" options:0 context:nil]; // [habit addObserver:self forKeyPath:@"iconKey" options:0 context:nil]; // [habit addObserver:self forKeyPath:@"period" options:0 context:nil]; @@ -68,20 +90,43 @@ -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NS // [habit addObserver:self forKeyPath:@"doTime" options:0 context:nil]; // [habit addObserver:self forKeyPath:@"skipTime" options:0 context:nil]; // [habit addObserver:self forKeyPath:@"surplusTimes" options:0 context:nil]; - - cell.textLabel.text = habit.title; - cell.imageView.image = [UIImage imageNamed:@"start"]; - - NSDate *nowDate = [NSDate date]; - if([habit.nextDoTime timeIntervalSinceDate:nowDate] > 0) { - NSDate *lastActionTime = habit.lastActionTime; - self.timeLineView.progressRatio = [nowDate timeIntervalSinceDate:lastActionTime] / [habit.nextDoTime timeIntervalSinceDate:lastActionTime]; +// } + + cell.textLabel.text = habit.title; + cell.imageView.image = [UIImage imageNamed:@"start"]; + + // FIXME 整合到HabitBiz中 + NSDate *nowDate = [NSDate date]; + if([habit.nextDoTime timeIntervalSinceDate:nowDate] > 0) { + NSDate *lastActionTime = habit.lastActionTime; + self.timeLineView.progressRatio = fmax([nowDate timeIntervalSinceDate:lastActionTime] / [habit.nextDoTime timeIntervalSinceDate:lastActionTime], 0); + if(habit.doTime != nil) { + NSTimeInterval nowTimeIntervalSinceDoTime = [nowDate timeIntervalSinceDate:habit.doTime]; + NSTimeInterval nextDoTimeIntervalSinceNow = [habit.nextDoTime timeIntervalSinceDate:nowDate]; + if(nowTimeIntervalSinceDoTime < 60) { + self.timeLineView.tip = @"Just done!"; + } + else if(nextDoTimeIntervalSinceNow < 60 * 5) { + self.timeLineView.tip = @"Do soon!"; + } + else { + self.timeLineView.tip = [NSString stringWithFormat:@"%f", nowTimeIntervalSinceDoTime]; + } } - else{ - self.timeLineView.progressRatio = 1.0; + else { + self.timeLineView.tip = @"New!"; } - } + else if([nowDate timeIntervalSinceDate:habit.nextPeriodBeginTime] > 0 && habit.surplusTimes > 0){ + self.timeLineView.progressRatio = 1.1; // late + self.timeLineView.tip = @"Late!"; + } + else { + self.timeLineView.progressRatio = 1.0; // do now + self.timeLineView.tip = @"Do now!"; + } + + [self.timeLineView setNeedsDisplay]; // FIXME 使用Observer?? } - (void)didReceiveMemoryWarning { @@ -121,6 +166,7 @@ -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { UITableView *tableView = ((UITableViewController*)self.parentViewController).tableView; _isTouchBegin = NO; + // done skip动画效果 [UIView animateKeyframesWithDuration:.5 delay:0.0 options:UIViewKeyframeAnimationOptionCalculationModeLinear animations:^{ [UIView addKeyframeWithRelativeStartTime:0.0 relativeDuration:0.5 animations:^{ diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewController.m" index ce5527fd..a96c2723 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewController.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewController.m" @@ -74,7 +74,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N } NSInteger index = [indexPath row]; Habit *habit = [_habitBiz.habitArray objectAtIndex:index]; - cell.habit = habit; + cell.habit = habit;//刷新 return cell; } diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/TimeLineView.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/TimeLineView.m" index 56dda87c..3e17145e 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/TimeLineView.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/TimeLineView.m" @@ -12,7 +12,7 @@ @implementation TimeLineView -(void)drawRect:(CGRect)rect { CGContextRef context = UIGraphicsGetCurrentContext(); - const CGFloat beginX = 0.0f, maxEndX = 174.0f; + const CGFloat beginX = 0.0f, maxEndX = 174.0f, minEndX = beginX + 20; CGFloat centerY = rect.origin.y + (rect.size.height / 2); const CGFloat lineWidth = 4.0f; CGContextSetLineWidth(context, lineWidth); @@ -23,7 +23,7 @@ -(void)drawRect:(CGRect)rect { CGFloat tipPostionX; if(self.progressRatio < 1.0) { - CGFloat currentEndX = beginX + (maxEndX - beginX) * self.progressRatio; + CGFloat currentEndX = minEndX + (maxEndX - minEndX) * self.progressRatio; CGContextMoveToPoint(context, beginX + lineWidth / 2, centerY); CGContextAddLineToPoint(context, currentEndX - lineWidth / 2, centerY); CGContextStrokePath(context); From 428acc0a8644bea4d7b606565a7f3221794cbd69 Mon Sep 17 00:00:00 2001 From: varvelworld Date: Mon, 15 Dec 2014 16:58:37 +0800 Subject: [PATCH 10/19] dev view controller transition animation --- .../iHabit/iHabit/AddHabitViewController.m" | 17 +++++++++++++++++ .../iHabit/iHabit/HabitTableViewController.m" | 9 ++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.m" index 54274db6..00614496 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.m" @@ -26,6 +26,23 @@ - (void)viewDidLoad { _periodTimesPicker.dataSource = periodTimesPickerViewController; _periodTimesPicker.delegate = periodTimesPickerViewController; [self addChildViewController:periodTimesPickerViewController]; + + self.navigationItem.hidesBackButton = YES; //隐藏默认back按钮 + UIBarButtonItem * transitionButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(gotoMenu:)]; + self.navigationItem.rightBarButtonItem = transitionButton; + + +} + +-(IBAction)gotoMenu:(id)sender { + CATransition *animation = [CATransition animation]; + animation.delegate = self; + animation.duration = 0.7; + animation.timingFunction = UIViewAnimationCurveEaseInOut; + animation.type = @"cube"; + animation.subtype = kCATransitionFromTop; + [[self.navigationController.view layer] addAnimation:animation forKey:@"animation"]; + [self.navigationController popViewControllerAnimated:NO]; } - (void)didReceiveMemoryWarning { diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewController.m" index a96c2723..64c75c83 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewController.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewController.m" @@ -25,7 +25,14 @@ @implementation HabitTableViewController{ -(void)scrollViewDidScroll:(UIScrollView *)scrollView { if(self.tableView.contentOffset.y <= -150) { - [self.navigationController pushViewController:[[AddHabitViewController alloc] initWithNibName:@"AddHabitViewController" bundle:nil] animated:YES]; + CATransition *animation = [CATransition animation]; + animation.delegate = self; + animation.duration = 0.7; + animation.timingFunction = UIViewAnimationCurveEaseInOut; + animation.type = @"cube"; + animation.subtype = kCATransitionFromBottom; + [[self.navigationController.view layer] addAnimation:animation forKey:@"animation"]; + [self.navigationController pushViewController:[[AddHabitViewController alloc] initWithNibName:@"AddHabitViewController" bundle:nil] animated:NO]; } } From c1aef01eb646e58aab66332a5b5697eac474ce08 Mon Sep 17 00:00:00 2001 From: varvelworld Date: Mon, 15 Dec 2014 22:23:05 +0800 Subject: [PATCH 11/19] =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89NavBar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iHabit/iHabit.xcodeproj/project.pbxproj" | 6 +++ .../iHabit/iHabit/AddHabitViewController.m" | 2 +- .../iHabit/iHabit/AppDelegate.m" | 6 ++- .../iHabit/iHabit/Habit.h" | 7 ++- .../iHabit/iHabit/Habit.m" | 20 +++++++- .../iHabit/iHabit/HabitBaseViewController.h" | 17 +++++++ .../iHabit/iHabit/HabitBaseViewController.m" | 50 +++++++++++++++++++ .../iHabit/iHabit/HabitBiz.h" | 2 +- .../iHabit/iHabit/HabitBiz.m" | 4 +- .../iHabit/HabitTableCellViewController.m" | 34 +++++++++---- .../iHabit/iHabit/HabitTableViewCell.m" | 12 ----- .../iHabit/iHabit/HabitTableViewController.m" | 18 ++++++- .../iHabitDB.xcdatamodel/contents" | 2 +- 13 files changed, 147 insertions(+), 33 deletions(-) create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBaseViewController.h" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBaseViewController.m" diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit.xcodeproj/project.pbxproj" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit.xcodeproj/project.pbxproj" index f26a2384..b0606346 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit.xcodeproj/project.pbxproj" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit.xcodeproj/project.pbxproj" @@ -9,6 +9,7 @@ /* Begin PBXBuildFile section */ 4BBC0F4413DC9B9C8D5D144C /* libPods-iHabit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4999720AA74C0E5AD0D5903C /* libPods-iHabit.a */; }; 96A42CF94F461F5F5B9D86EC /* libPods-iHabitTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FE5D40FCFC579DA59F6D2237 /* libPods-iHabitTests.a */; }; + EC4643021A3F1F860098B380 /* HabitBaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EC4643011A3F1F860098B380 /* HabitBaseViewController.m */; }; EC4C42E61A2EDAEA00A82D8D /* iHabitDB.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = EC4C42E41A2EDAEA00A82D8D /* iHabitDB.xcdatamodeld */; }; EC4C42E71A2EDAEA00A82D8D /* iHabitDB.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = EC4C42E41A2EDAEA00A82D8D /* iHabitDB.xcdatamodeld */; }; EC4C42EA1A2EE35700A82D8D /* HistoryPeriod.m in Sources */ = {isa = PBXBuildFile; fileRef = EC4C42E91A2EE35700A82D8D /* HistoryPeriod.m */; }; @@ -52,6 +53,8 @@ 60C7E73AA0F2F43CD917A9E6 /* Pods-iHabit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iHabit.release.xcconfig"; path = "Pods/Target Support Files/Pods-iHabit/Pods-iHabit.release.xcconfig"; sourceTree = ""; }; 74883FFA65CCAA515622A0F1 /* Pods-iHabit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iHabit.debug.xcconfig"; path = "Pods/Target Support Files/Pods-iHabit/Pods-iHabit.debug.xcconfig"; sourceTree = ""; }; D12863C1136CBB00C1307621 /* Pods-iHabitTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iHabitTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-iHabitTests/Pods-iHabitTests.debug.xcconfig"; sourceTree = ""; }; + EC4643001A3F1F860098B380 /* HabitBaseViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HabitBaseViewController.h; sourceTree = ""; }; + EC4643011A3F1F860098B380 /* HabitBaseViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HabitBaseViewController.m; sourceTree = ""; }; EC4C42E51A2EDAEA00A82D8D /* iHabitDB.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = iHabitDB.xcdatamodel; sourceTree = ""; }; EC4C42E81A2EE35700A82D8D /* HistoryPeriod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HistoryPeriod.h; sourceTree = ""; }; EC4C42E91A2EE35700A82D8D /* HistoryPeriod.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HistoryPeriod.m; sourceTree = ""; }; @@ -247,6 +250,8 @@ EC73E7301A383B7400E6823E /* AddHabitViewController.h */, EC73E7311A383B7400E6823E /* AddHabitViewController.m */, EC73E7321A383B7400E6823E /* AddHabitViewController.xib */, + EC4643001A3F1F860098B380 /* HabitBaseViewController.h */, + EC4643011A3F1F860098B380 /* HabitBaseViewController.m */, ); name = Controller; sourceTree = ""; @@ -445,6 +450,7 @@ EC73E7331A383B7400E6823E /* AddHabitViewController.m in Sources */, EC4C43121A31A3D000A82D8D /* Habit.m in Sources */, EC4C42FC1A2EFE0F00A82D8D /* HabitTableCellViewController.m in Sources */, + EC4643021A3F1F860098B380 /* HabitBaseViewController.m in Sources */, EC4C42EA1A2EE35700A82D8D /* HistoryPeriod.m in Sources */, EC55A2921A2C2D3E00488D4C /* AppDelegate.m in Sources */, EC4C42F61A2EEE6200A82D8D /* HabitTableViewController.m in Sources */, diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.m" index 00614496..aadcb707 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.m" @@ -52,7 +52,7 @@ - (void)didReceiveMemoryWarning { - (IBAction)addHabit:(id)sender { [_habitBiz saveHabitWithTitle: self.habitTitleTextField.text - iconKey: @"" period:[_periodTimesPicker selectedRowInComponent:0] + iconName: @"start" period:[_periodTimesPicker selectedRowInComponent:0] times: [NSNumber numberWithInteger:[_periodTimesPicker selectedRowInComponent:1] + 1]]; [self.navigationController popViewControllerAnimated:YES]; } diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AppDelegate.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AppDelegate.m" index 40b5cd25..d1286e0a 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AppDelegate.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AppDelegate.m" @@ -10,6 +10,8 @@ #import #import "HabitTableViewController.h" #import "AddHabitViewController.h" +#import "HabitBaseViewController.h" + @interface AppDelegate () @@ -25,10 +27,10 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( _window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bounds]]; _window.backgroundColor = UIColor.whiteColor; - HabitTableViewController *habitTableViewController = [[HabitTableViewController alloc] initWithStyle:UITableViewStylePlain]; - UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:habitTableViewController]; + UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:[[HabitBaseViewController alloc] initWithViewController:habitTableViewController]]; _window.rootViewController = navigationController; + navigationController.navigationBar.hidden = YES; [_window makeKeyAndVisible]; diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Habit.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Habit.h" index 426d0ffa..1897ea2c 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Habit.h" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Habit.h" @@ -8,6 +8,7 @@ #import #import +#import typedef NS_ENUM(NSInteger, HabitPeriod) { // 习惯周期 @@ -17,12 +18,13 @@ typedef NS_ENUM(NSInteger, HabitPeriod) { // 习惯周期 HabitPeriodYear }; + @interface Habit : NSManagedObject // 标题 @property (nonatomic, retain) NSString * title; // 图标Key -@property (nonatomic, retain) NSString * iconKey; +@property (nonatomic, retain) NSString * iconName; // 周期 @property (nonatomic, retain) NSNumber * period; // 次数 @@ -38,5 +40,8 @@ typedef NS_ENUM(NSInteger, HabitPeriod) { // 习惯周期 @property (nonatomic, retain) NSNumber * surplusTimes; -(NSDate *)lastActionTime; +-(UIColor*)color; + ++(NSDictionary*) iconColorDict; @end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Habit.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Habit.m" index c545a941..4a60bb4d 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Habit.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Habit.m" @@ -8,11 +8,10 @@ #import "Habit.h" - @implementation Habit @dynamic title; -@dynamic iconKey; +@dynamic iconName; @dynamic period; @dynamic times; @dynamic createTime; @@ -28,4 +27,21 @@ -(NSDate *)lastActionTime { self.skipTime == nil ? 0 :[self.skipTime timeIntervalSince1970])]; } +-(UIColor*)color { + return Habit.iconColorDict[self.iconName]; +} + ++(NSDictionary*) iconColorDict { + static NSDictionary* iconColorDict = nil; + if(iconColorDict == nil) { + iconColorDict = @{ + @"start" : UIColor.yellowColor + + }; + } + return iconColorDict; +} + + + @end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBaseViewController.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBaseViewController.h" new file mode 100644 index 00000000..99a95021 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBaseViewController.h" @@ -0,0 +1,17 @@ +// +// HabitBaseViewController.h +// iHabit +// +// Created by 陆钟豪 on 14/12/15. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import + +@interface HabitBaseViewController : UIViewController + +@property (strong, nonatomic, readonly) UIViewController *viewController; +@property (weak, nonatomic, readonly) UINavigationBar *navigationBar; +-(instancetype)initWithViewController:(UIViewController*) viewController; + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBaseViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBaseViewController.m" new file mode 100644 index 00000000..5a94a486 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBaseViewController.m" @@ -0,0 +1,50 @@ +// +// HabitBaseViewController.m +// iHabit +// +// Created by 陆钟豪 on 14/12/15. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import "HabitBaseViewController.h" + +@interface HabitBaseViewController () + +@end + +@implementation HabitBaseViewController + +-(instancetype)initWithViewController:(UIViewController *)viewController { + self = [super init]; + _viewController = viewController; + return self; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + UINavigationBar *navigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, -20, 320, 100)]; + [navigationBar pushNavigationItem:_viewController.navigationItem animated:NO]; + _navigationBar = navigationBar; + [self.view addSubview:navigationBar]; + [self addChildViewController:_viewController]; + _viewController.view.frame = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y + 80, self.view.frame.size.width, self.view.frame.size.height - 80); // FIXME 60 is hard code + + [self.view addSubview:_viewController.view]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBiz.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBiz.h" index fa135a4c..245d08e2 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBiz.h" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBiz.h" @@ -14,7 +14,7 @@ -(NSInteger)done:(Habit*)habit; -(NSInteger)skip:(Habit*)habit; --(Habit*)saveHabitWithTitle:(NSString*)title iconKey:(NSString*)iconKey period:(HabitPeriod)period times:(NSNumber*)times; +-(Habit*)saveHabitWithTitle:(NSString*)title iconName:(NSString*)iconName period:(HabitPeriod)period times:(NSNumber*)times; +(HabitBiz*)getInstance; diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBiz.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBiz.m" index d30d73f1..058f6fed 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBiz.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBiz.m" @@ -20,7 +20,7 @@ -(instancetype)init { return self; } --(Habit*)saveHabitWithTitle:(NSString*)title iconKey:(NSString*)iconKey period:(HabitPeriod)period times:(NSNumber*)times { +-(Habit*)saveHabitWithTitle:(NSString*)title iconName:(NSString*)iconName period:(HabitPeriod)period times:(NSNumber*)times { NSDate *nowDate = [NSDate date]; NSCalendar *cal = [NSCalendar currentCalendar]; //日历 @@ -28,7 +28,7 @@ -(Habit*)saveHabitWithTitle:(NSString*)title iconKey:(NSString*)iconKey period:( newHabit.title = title; newHabit.period = [NSNumber numberWithInteger:period]; newHabit.times = times; - newHabit.iconKey = iconKey; + newHabit.iconName = iconName; newHabit.createTime = nowDate; // 计算periodEndTime diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableCellViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableCellViewController.m" index 927c63a5..470aa21b 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableCellViewController.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableCellViewController.m" @@ -27,7 +27,6 @@ - (void)viewDidLoad { HabitTableViewCell *cell = (HabitTableViewCell*) super.view; TimeLineView *timeLine = [[TimeLineView alloc] initWithFrame:CGRectMake(67, 50, 242, 30)]; - timeLine.color = UIColor.blueColor; timeLine.backgroundColor = UIColor.clearColor; [cell.contentView addSubview:timeLine]; self.timeLineView = timeLine; @@ -93,7 +92,17 @@ -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NS // } cell.textLabel.text = habit.title; - cell.imageView.image = [UIImage imageNamed:@"start"]; + + // 设置图标 + UIImage *iconImage = [UIImage imageNamed:habit.iconName]; + CGSize iconSize = iconImage.size; + cell.imageView.maskView = [[UIImageView alloc] initWithImage:iconImage]; + UIGraphicsBeginImageContext(iconSize); + CGContextRef contextRef = UIGraphicsGetCurrentContext(); + CGContextSetFillColorWithColor(contextRef, habit.color.CGColor); + CGContextFillRect(contextRef, CGRectMake(0, 0, iconSize.width, iconSize.height)); + cell.imageView.image = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); // FIXME 整合到HabitBiz中 NSDate *nowDate = [NSDate date]; @@ -125,7 +134,7 @@ -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NS self.timeLineView.progressRatio = 1.0; // do now self.timeLineView.tip = @"Do now!"; } - + self.timeLineView.color = habit.color; [self.timeLineView setNeedsDisplay]; // FIXME 使用Observer?? } @@ -153,6 +162,16 @@ -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { cellContentView.frame.origin.y, cellContentView.frame.size.width, cellContentView.frame.size.height); + + if(0 < offsetX && offsetX < self.offsetMaxX) { + float offsetRatio = offsetX / self.offsetMaxX; + cellContentView.backgroundColor = [UIColor colorWithRed:0 green:1 blue:0 alpha:0.3 * offsetRatio]; + } + else if(self.offsetMinX < offsetX && offsetX < 0) { + float offsetRatio = offsetX / self.offsetMinX; + cellContentView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:1 alpha:0.3 * offsetRatio]; + } + NSInteger afterActionIndex; if(offsetX == self.offsetMinX) afterActionIndex = [[HabitBiz getInstance]skip:cell.habit]; @@ -199,17 +218,12 @@ -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { cellContentView.frame.origin.y, cellContentView.frame.size.width, cellContentView.frame.size.height); + cellContentView.backgroundColor = [UIColor clearColor]; } completion:nil]; } -(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { - UIView *cellContentView = ((UITableViewCell*)(self.view)).contentView; - [UIView animateWithDuration:0.3f delay:0.0f options:UIViewAnimationOptionCurveEaseInOut animations:^{ - cellContentView.frame = CGRectMake(0, - cellContentView.frame.origin.y, - cellContentView.frame.size.width, - cellContentView.frame.size.height); - } completion:nil]; + [self touchesEnded:touches withEvent:event]; } -(void)dealloc { diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewCell.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewCell.m" index de210bb3..52453407 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewCell.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewCell.m" @@ -18,17 +18,5 @@ -(void)layoutSubviews { self.textLabel.backgroundColor = UIColor.clearColor; } --(void)setHabit:(Habit *)habit { - - self.textLabel.text = habit.title; - self.imageView.image = [UIImage imageNamed:@"start"]; - _habit = habit; -} - --(Habit *)Habit { - return _habit; -} - - @end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewController.m" index 64c75c83..2a3a134d 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewController.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewController.m" @@ -14,6 +14,7 @@ #import "HabitBiz.h" #import "AddHabitViewController.h" #import +#import "HabitBaseViewController.h" @interface HabitTableViewController () @@ -24,6 +25,19 @@ @implementation HabitTableViewController{ } -(void)scrollViewDidScroll:(UIScrollView *)scrollView { +// if(self.tableView.contentOffset.y <= -150) { +// CATransition *animation = [CATransition animation]; +// animation.delegate = self; +// animation.duration = 0.7; +// animation.timingFunction = UIViewAnimationCurveEaseInOut; +// animation.type = @"cube"; +// animation.subtype = kCATransitionFromBottom; +// [[self.navigationController.view layer] addAnimation:animation forKey:@"animation"]; +// [self.navigationController pushViewController:[[AddHabitViewController alloc] initWithNibName:@"AddHabitViewController" bundle:nil] animated:NO]; +// } +} + +-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { if(self.tableView.contentOffset.y <= -150) { CATransition *animation = [CATransition animation]; animation.delegate = self; @@ -32,7 +46,7 @@ -(void)scrollViewDidScroll:(UIScrollView *)scrollView { animation.type = @"cube"; animation.subtype = kCATransitionFromBottom; [[self.navigationController.view layer] addAnimation:animation forKey:@"animation"]; - [self.navigationController pushViewController:[[AddHabitViewController alloc] initWithNibName:@"AddHabitViewController" bundle:nil] animated:NO]; + [self.navigationController pushViewController:[[HabitBaseViewController alloc] initWithViewController:[[AddHabitViewController alloc] initWithNibName:@"AddHabitViewController" bundle:nil]] animated:NO]; } } @@ -50,6 +64,7 @@ - (void)viewDidLoad { //这个标志默认是YES,使用上面的150ms的timer,如果设置为NO,touch事件立即传递给subView,不会有150ms的等待。 self.tableView.delaysContentTouches = NO; UIView* tableHeader = [[CellActionView alloc] initWithFrame:CGRectMake(0, -200, 320, 200)]; + tableHeader.backgroundColor = UIColor.blueColor; self.tableView.delegate = self; @@ -58,6 +73,7 @@ - (void)viewDidLoad { [self.tableView addSubview:tableHeader]; } + - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/iHabitDB.xcdatamodeld/iHabitDB.xcdatamodel/contents" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/iHabitDB.xcdatamodeld/iHabitDB.xcdatamodel/contents" index 4e192d83..d41532b3 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/iHabitDB.xcdatamodeld/iHabitDB.xcdatamodel/contents" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/iHabitDB.xcdatamodeld/iHabitDB.xcdatamodel/contents" @@ -3,7 +3,7 @@ - + From f4f0eeb615484f716c3593e72c934faea31d662b Mon Sep 17 00:00:00 2001 From: varvelworld Date: Mon, 15 Dec 2014 23:22:46 +0800 Subject: [PATCH 12/19] =?UTF-8?q?=E4=BF=AE=E6=94=B9AddHabitViewController?= =?UTF-8?q?=E5=92=8CHabitTableViewController=E5=88=9B=E5=BB=BA=E6=96=B9?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iHabit/iHabit/AddHabitViewController.h" | 4 ++++ .../iHabit/iHabit/AddHabitViewController.m" | 9 ++++++++- .../iHabit/iHabit/AppDelegate.m" | 3 +-- .../iHabit/iHabit/HabitBaseViewController.m" | 2 +- .../iHabit/iHabit/HabitTableViewController.h" | 5 +++++ .../iHabit/iHabit/HabitTableViewController.m" | 12 +++++++++--- 6 files changed, 28 insertions(+), 7 deletions(-) diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.h" index 829b3a10..45623ac4 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.h" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.h" @@ -7,6 +7,7 @@ // #import +#import "HabitBaseViewController.h" @interface AddHabitViewController : UIViewController @@ -15,6 +16,9 @@ - (IBAction)addHabit:(id)sender; ++(HabitBaseViewController*) createHabitViewController; +@property (weak, nonatomic) HabitBaseViewController* habitBaseViewController; + @end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.m" index aadcb707..3d1d5104 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.m" @@ -56,10 +56,17 @@ - (IBAction)addHabit:(id)sender { times: [NSNumber numberWithInteger:[_periodTimesPicker selectedRowInComponent:1] + 1]]; [self.navigationController popViewControllerAnimated:YES]; } - + + ++(HabitBaseViewController*) createHabitViewController { + return [[HabitBaseViewController alloc] initWithViewController:[[AddHabitViewController alloc] initWithNibName:@"AddHabitViewController" bundle:nil]]; +} @end + + + @implementation PeriodTimesPickerViewController { NSArray *_periodTitleArray; diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AppDelegate.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AppDelegate.m" index d1286e0a..ae33ab79 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AppDelegate.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AppDelegate.m" @@ -27,8 +27,7 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( _window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bounds]]; _window.backgroundColor = UIColor.whiteColor; - HabitTableViewController *habitTableViewController = [[HabitTableViewController alloc] initWithStyle:UITableViewStylePlain]; - UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:[[HabitBaseViewController alloc] initWithViewController:habitTableViewController]]; + UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:[HabitTableViewController createHabitViewController]]; _window.rootViewController = navigationController; navigationController.navigationBar.hidden = YES; diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBaseViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBaseViewController.m" index 5a94a486..3d104cd9 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBaseViewController.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBaseViewController.m" @@ -17,6 +17,7 @@ @implementation HabitBaseViewController -(instancetype)initWithViewController:(UIViewController *)viewController { self = [super init]; _viewController = viewController; + [_viewController setValue:self forKey:@"habitBaseViewController"]; return self; } @@ -28,7 +29,6 @@ - (void)viewDidLoad { [self.view addSubview:navigationBar]; [self addChildViewController:_viewController]; _viewController.view.frame = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y + 80, self.view.frame.size.width, self.view.frame.size.height - 80); // FIXME 60 is hard code - [self.view addSubview:_viewController.view]; } diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewController.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewController.h" index a0df416c..9ed6ccbc 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewController.h" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewController.h" @@ -8,7 +8,12 @@ #import #import "Habit.h" +#import "HabitBaseViewController.h" @interface HabitTableViewController : UITableViewController ++(HabitBaseViewController*) createHabitViewController; +@property (weak, nonatomic) HabitBaseViewController* habitBaseViewController; + @end + diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewController.m" index 2a3a134d..c10ba833 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewController.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewController.m" @@ -38,15 +38,17 @@ -(void)scrollViewDidScroll:(UIScrollView *)scrollView { } -(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { - if(self.tableView.contentOffset.y <= -150) { + if(self.tableView.contentOffset.y <= -50) { CATransition *animation = [CATransition animation]; animation.delegate = self; animation.duration = 0.7; animation.timingFunction = UIViewAnimationCurveEaseInOut; animation.type = @"cube"; animation.subtype = kCATransitionFromBottom; - [[self.navigationController.view layer] addAnimation:animation forKey:@"animation"]; - [self.navigationController pushViewController:[[HabitBaseViewController alloc] initWithViewController:[[AddHabitViewController alloc] initWithNibName:@"AddHabitViewController" bundle:nil]] animated:NO]; + UINavigationController *navigationController = self.habitBaseViewController.navigationController; // 要从habitBaseViewController中找到navigationController + [[navigationController.view layer] addAnimation:animation forKey:@"animation"]; + HabitBaseViewController* hbvc = [AddHabitViewController createHabitViewController]; + [navigationController pushViewController:hbvc animated:NO]; } } @@ -108,4 +110,8 @@ -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPat return 80; } ++(HabitBaseViewController*) createHabitViewController { + return [[HabitBaseViewController alloc] initWithViewController:[[HabitTableViewController alloc] initWithStyle:UITableViewStylePlain]]; +} + @end From 9ab487606f0fb25a25c5ac020ad44c88508c16cc Mon Sep 17 00:00:00 2001 From: varvelworld Date: Wed, 17 Dec 2014 14:52:50 +0800 Subject: [PATCH 13/19] no message --- .../iHabit/iHabit.xcodeproj/project.pbxproj" | 6 ++ .../iHabit/iHabit/AppDelegate.m" | 3 +- .../iHabit/iHabit/HabitBaseViewController.m" | 17 ++++- .../iHabit/iHabit/HabitMainViewController.h" | 16 +++++ .../iHabit/iHabit/HabitMainViewController.m" | 64 +++++++++++++++++++ .../iHabit/iHabit/HabitTableViewController.m" | 1 + 6 files changed, 103 insertions(+), 4 deletions(-) create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitMainViewController.h" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitMainViewController.m" diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit.xcodeproj/project.pbxproj" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit.xcodeproj/project.pbxproj" index b0606346..bbc031ba 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit.xcodeproj/project.pbxproj" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit.xcodeproj/project.pbxproj" @@ -9,6 +9,7 @@ /* Begin PBXBuildFile section */ 4BBC0F4413DC9B9C8D5D144C /* libPods-iHabit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4999720AA74C0E5AD0D5903C /* libPods-iHabit.a */; }; 96A42CF94F461F5F5B9D86EC /* libPods-iHabitTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FE5D40FCFC579DA59F6D2237 /* libPods-iHabitTests.a */; }; + EC2466E71A412F6A0046CB2C /* HabitMainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EC2466E61A412F6A0046CB2C /* HabitMainViewController.m */; }; EC4643021A3F1F860098B380 /* HabitBaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EC4643011A3F1F860098B380 /* HabitBaseViewController.m */; }; EC4C42E61A2EDAEA00A82D8D /* iHabitDB.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = EC4C42E41A2EDAEA00A82D8D /* iHabitDB.xcdatamodeld */; }; EC4C42E71A2EDAEA00A82D8D /* iHabitDB.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = EC4C42E41A2EDAEA00A82D8D /* iHabitDB.xcdatamodeld */; }; @@ -53,6 +54,8 @@ 60C7E73AA0F2F43CD917A9E6 /* Pods-iHabit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iHabit.release.xcconfig"; path = "Pods/Target Support Files/Pods-iHabit/Pods-iHabit.release.xcconfig"; sourceTree = ""; }; 74883FFA65CCAA515622A0F1 /* Pods-iHabit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iHabit.debug.xcconfig"; path = "Pods/Target Support Files/Pods-iHabit/Pods-iHabit.debug.xcconfig"; sourceTree = ""; }; D12863C1136CBB00C1307621 /* Pods-iHabitTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iHabitTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-iHabitTests/Pods-iHabitTests.debug.xcconfig"; sourceTree = ""; }; + EC2466E51A412F6A0046CB2C /* HabitMainViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HabitMainViewController.h; sourceTree = ""; }; + EC2466E61A412F6A0046CB2C /* HabitMainViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HabitMainViewController.m; sourceTree = ""; }; EC4643001A3F1F860098B380 /* HabitBaseViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HabitBaseViewController.h; sourceTree = ""; }; EC4643011A3F1F860098B380 /* HabitBaseViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HabitBaseViewController.m; sourceTree = ""; }; EC4C42E51A2EDAEA00A82D8D /* iHabitDB.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = iHabitDB.xcdatamodel; sourceTree = ""; }; @@ -252,6 +255,8 @@ EC73E7321A383B7400E6823E /* AddHabitViewController.xib */, EC4643001A3F1F860098B380 /* HabitBaseViewController.h */, EC4643011A3F1F860098B380 /* HabitBaseViewController.m */, + EC2466E51A412F6A0046CB2C /* HabitMainViewController.h */, + EC2466E61A412F6A0046CB2C /* HabitMainViewController.m */, ); name = Controller; sourceTree = ""; @@ -449,6 +454,7 @@ EC73E7271A35D15100E6823E /* HabitBiz.m in Sources */, EC73E7331A383B7400E6823E /* AddHabitViewController.m in Sources */, EC4C43121A31A3D000A82D8D /* Habit.m in Sources */, + EC2466E71A412F6A0046CB2C /* HabitMainViewController.m in Sources */, EC4C42FC1A2EFE0F00A82D8D /* HabitTableCellViewController.m in Sources */, EC4643021A3F1F860098B380 /* HabitBaseViewController.m in Sources */, EC4C42EA1A2EE35700A82D8D /* HistoryPeriod.m in Sources */, diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AppDelegate.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AppDelegate.m" index ae33ab79..55c45eba 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AppDelegate.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AppDelegate.m" @@ -11,6 +11,7 @@ #import "HabitTableViewController.h" #import "AddHabitViewController.h" #import "HabitBaseViewController.h" +#import "HabitMainViewController.h" @interface AppDelegate () @@ -27,7 +28,7 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( _window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bounds]]; _window.backgroundColor = UIColor.whiteColor; - UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:[HabitTableViewController createHabitViewController]]; + UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:[[HabitMainViewController alloc] init]]; _window.rootViewController = navigationController; navigationController.navigationBar.hidden = YES; diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBaseViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBaseViewController.m" index 3d104cd9..a76c0076 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBaseViewController.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBaseViewController.m" @@ -22,14 +22,25 @@ -(instancetype)initWithViewController:(UIViewController *)viewController { } - (void)viewDidLoad { + [super viewDidLoad]; UINavigationBar *navigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, -20, 320, 100)]; - [navigationBar pushNavigationItem:_viewController.navigationItem animated:NO]; + navigationBar.translucent = NO; _navigationBar = navigationBar; - [self.view addSubview:navigationBar]; [self addChildViewController:_viewController]; - _viewController.view.frame = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y + 80, self.view.frame.size.width, self.view.frame.size.height - 80); // FIXME 60 is hard code [self.view addSubview:_viewController.view]; + [self.view addSubview:navigationBar]; + [navigationBar pushNavigationItem:_viewController.navigationItem animated:NO]; + + // 添加nav阴影 + navigationBar.layer.shadowColor = [UIColor blackColor].CGColor; + navigationBar.layer.shadowOffset = CGSizeMake(0, 0); + navigationBar.layer.shadowOpacity = 0.5; + navigationBar.layer.shadowRadius = 5; + + + _viewController.view.frame = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y + 80 - 20, self.view.frame.size.width, self.view.frame.size.height + 80 - 20); // FIXME (80 - 20) is hard code + } - (void)didReceiveMemoryWarning { diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitMainViewController.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitMainViewController.h" new file mode 100644 index 00000000..0abb12a9 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitMainViewController.h" @@ -0,0 +1,16 @@ +// +// HabitMainViewController.h +// iHabit +// +// Created by 陆钟豪 on 14/12/17. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import +#import "HabitTableViewController.h" + +@interface HabitMainViewController : UIViewController + +@property (strong, nonatomic, readonly) HabitTableViewController *habitTableViewController; + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitMainViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitMainViewController.m" new file mode 100644 index 00000000..afb9177c --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitMainViewController.m" @@ -0,0 +1,64 @@ +// +// HabitMainViewController.m +// iHabit +// +// Created by 陆钟豪 on 14/12/17. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import "HabitMainViewController.h" + +@interface HabitMainViewController () + +@end + + +@implementation HabitMainViewController + + +- (void)viewDidLoad { + + [super viewDidLoad]; + HabitTableViewController *habitTableViewController = [[HabitTableViewController alloc] initWithStyle:UITableViewStylePlain]; + UIView *navigationBarView = [[UIView alloc] initWithFrame:CGRectMake(0, -20, 320, 100)]; + navigationBarView.backgroundColor = UIColor.whiteColor; + + UILabel *titleLable = [[UILabel alloc] initWithFrame:CGRectMake(10, 20, 300, 100)]; + titleLable.font = [UIFont fontWithName:@"Raleway-MediumTracked" size:40]; + titleLable.text = @"iHabit"; + + [navigationBarView addSubview:titleLable]; + + + // 添加nav阴影 + navigationBarView.layer.shadowColor = [UIColor blackColor].CGColor; + navigationBarView.layer.shadowOffset = CGSizeMake(0, 0); + navigationBarView.layer.shadowOpacity = 0.5; + navigationBarView.layer.shadowRadius = 5; + + habitTableViewController.view.frame = CGRectMake(0, 80, 320, 568 - 80); + + [self.view addSubview:habitTableViewController.view]; + [self.view addSubview:navigationBarView]; + + _habitTableViewController = habitTableViewController; + +} + + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewController.m" index c10ba833..8b10c400 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewController.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitTableViewController.m" @@ -73,6 +73,7 @@ - (void)viewDidLoad { _habitBiz = [HabitBiz getInstance]; [self.tableView addSubview:tableHeader]; + } From c28b5f45ec57a2e79fb06747b502dd9793ad92f5 Mon Sep 17 00:00:00 2001 From: varvelworld Date: Wed, 17 Dec 2014 23:14:58 +0800 Subject: [PATCH 14/19] no message --- .../iHabit/Podfile.lock" | 4 +- .../iHabit/iHabit.xcodeproj/project.pbxproj" | 18 +++-- .../iHabit/iHabit/AddHabitViewController.h" | 4 -- .../iHabit/iHabit/AddHabitViewController.m" | 66 ++++++++++++++++--- .../iHabit/iHabit/AddHabitViewController.xib" | 14 ++-- .../iHabit/iHabit/AppDelegate.m" | 1 - .../iHabit/iHabit/GridPickerViewController.h" | 21 ++++++ .../iHabit/iHabit/GridPickerViewController.m" | 56 ++++++++++++++++ .../iHabit/iHabit/HabitBaseViewController.h" | 17 ----- .../iHabit/iHabit/HabitBaseViewController.m" | 61 ----------------- .../iHabit/iHabit/HabitMainViewController.m" | 8 +-- .../iHabit/iHabit/HabitTableViewController.h" | 4 -- .../iHabit/iHabit/HabitTableViewController.m" | 24 +------ .../iHabit/iHabit/LineView.h" | 15 +++++ .../iHabit/iHabit/LineView.m" | 31 +++++++++ 15 files changed, 207 insertions(+), 137 deletions(-) create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/GridPickerViewController.h" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/GridPickerViewController.m" delete mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBaseViewController.h" delete mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBaseViewController.m" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/LineView.h" create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/LineView.m" diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/Podfile.lock" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/Podfile.lock" index 31a2df0b..48c40bd4 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/Podfile.lock" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/Podfile.lock" @@ -1,6 +1,6 @@ PODS: - MagicalRecord (2.2): - - MagicalRecord/Core (= 2.2) + - MagicalRecord/Core - MagicalRecord/Core (2.2) DEPENDENCIES: @@ -9,4 +9,4 @@ DEPENDENCIES: SPEC CHECKSUMS: MagicalRecord: 2b471584fc9e3137f3d0a56967917baa4979e224 -COCOAPODS: 0.35.0 +COCOAPODS: 0.34.4 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit.xcodeproj/project.pbxproj" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit.xcodeproj/project.pbxproj" index bbc031ba..9fd18a11 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit.xcodeproj/project.pbxproj" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit.xcodeproj/project.pbxproj" @@ -9,8 +9,9 @@ /* Begin PBXBuildFile section */ 4BBC0F4413DC9B9C8D5D144C /* libPods-iHabit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4999720AA74C0E5AD0D5903C /* libPods-iHabit.a */; }; 96A42CF94F461F5F5B9D86EC /* libPods-iHabitTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FE5D40FCFC579DA59F6D2237 /* libPods-iHabitTests.a */; }; + CDE29E691A417BFF00DEE2AB /* LineView.m in Sources */ = {isa = PBXBuildFile; fileRef = CDE29E681A417BFF00DEE2AB /* LineView.m */; }; + CDE29E6C1A41B24100DEE2AB /* GridPickerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CDE29E6B1A41B24100DEE2AB /* GridPickerViewController.m */; }; EC2466E71A412F6A0046CB2C /* HabitMainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EC2466E61A412F6A0046CB2C /* HabitMainViewController.m */; }; - EC4643021A3F1F860098B380 /* HabitBaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EC4643011A3F1F860098B380 /* HabitBaseViewController.m */; }; EC4C42E61A2EDAEA00A82D8D /* iHabitDB.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = EC4C42E41A2EDAEA00A82D8D /* iHabitDB.xcdatamodeld */; }; EC4C42E71A2EDAEA00A82D8D /* iHabitDB.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = EC4C42E41A2EDAEA00A82D8D /* iHabitDB.xcdatamodeld */; }; EC4C42EA1A2EE35700A82D8D /* HistoryPeriod.m in Sources */ = {isa = PBXBuildFile; fileRef = EC4C42E91A2EE35700A82D8D /* HistoryPeriod.m */; }; @@ -53,11 +54,13 @@ 5780C07F6DD8995732F7D1FF /* Pods-iHabitTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iHabitTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-iHabitTests/Pods-iHabitTests.release.xcconfig"; sourceTree = ""; }; 60C7E73AA0F2F43CD917A9E6 /* Pods-iHabit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iHabit.release.xcconfig"; path = "Pods/Target Support Files/Pods-iHabit/Pods-iHabit.release.xcconfig"; sourceTree = ""; }; 74883FFA65CCAA515622A0F1 /* Pods-iHabit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iHabit.debug.xcconfig"; path = "Pods/Target Support Files/Pods-iHabit/Pods-iHabit.debug.xcconfig"; sourceTree = ""; }; + CDE29E671A417BFF00DEE2AB /* LineView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LineView.h; sourceTree = ""; }; + CDE29E681A417BFF00DEE2AB /* LineView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LineView.m; sourceTree = ""; }; + CDE29E6A1A41B24100DEE2AB /* GridPickerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GridPickerViewController.h; sourceTree = ""; }; + CDE29E6B1A41B24100DEE2AB /* GridPickerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GridPickerViewController.m; sourceTree = ""; }; D12863C1136CBB00C1307621 /* Pods-iHabitTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iHabitTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-iHabitTests/Pods-iHabitTests.debug.xcconfig"; sourceTree = ""; }; EC2466E51A412F6A0046CB2C /* HabitMainViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HabitMainViewController.h; sourceTree = ""; }; EC2466E61A412F6A0046CB2C /* HabitMainViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HabitMainViewController.m; sourceTree = ""; }; - EC4643001A3F1F860098B380 /* HabitBaseViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HabitBaseViewController.h; sourceTree = ""; }; - EC4643011A3F1F860098B380 /* HabitBaseViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HabitBaseViewController.m; sourceTree = ""; }; EC4C42E51A2EDAEA00A82D8D /* iHabitDB.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = iHabitDB.xcdatamodel; sourceTree = ""; }; EC4C42E81A2EE35700A82D8D /* HistoryPeriod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HistoryPeriod.h; sourceTree = ""; }; EC4C42E91A2EE35700A82D8D /* HistoryPeriod.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HistoryPeriod.m; sourceTree = ""; }; @@ -239,6 +242,8 @@ EC73E7201A35C7AD00E6823E /* InnerShadowView.m */, EC73E7221A35CA0900E6823E /* CellActionView.h */, EC73E7231A35CA0900E6823E /* CellActionView.m */, + CDE29E671A417BFF00DEE2AB /* LineView.h */, + CDE29E681A417BFF00DEE2AB /* LineView.m */, ); name = View; sourceTree = ""; @@ -253,10 +258,10 @@ EC73E7301A383B7400E6823E /* AddHabitViewController.h */, EC73E7311A383B7400E6823E /* AddHabitViewController.m */, EC73E7321A383B7400E6823E /* AddHabitViewController.xib */, - EC4643001A3F1F860098B380 /* HabitBaseViewController.h */, - EC4643011A3F1F860098B380 /* HabitBaseViewController.m */, EC2466E51A412F6A0046CB2C /* HabitMainViewController.h */, EC2466E61A412F6A0046CB2C /* HabitMainViewController.m */, + CDE29E6A1A41B24100DEE2AB /* GridPickerViewController.h */, + CDE29E6B1A41B24100DEE2AB /* GridPickerViewController.m */, ); name = Controller; sourceTree = ""; @@ -456,14 +461,15 @@ EC4C43121A31A3D000A82D8D /* Habit.m in Sources */, EC2466E71A412F6A0046CB2C /* HabitMainViewController.m in Sources */, EC4C42FC1A2EFE0F00A82D8D /* HabitTableCellViewController.m in Sources */, - EC4643021A3F1F860098B380 /* HabitBaseViewController.m in Sources */, EC4C42EA1A2EE35700A82D8D /* HistoryPeriod.m in Sources */, EC55A2921A2C2D3E00488D4C /* AppDelegate.m in Sources */, EC4C42F61A2EEE6200A82D8D /* HabitTableViewController.m in Sources */, EC4C42EE1A2EE35800A82D8D /* HistoryAction.m in Sources */, + CDE29E691A417BFF00DEE2AB /* LineView.m in Sources */, EC55A28F1A2C2D3E00488D4C /* main.m in Sources */, EC73E7211A35C7AD00E6823E /* InnerShadowView.m in Sources */, EC4C42F91A2EFB3E00A82D8D /* HabitTableViewCell.m in Sources */, + CDE29E6C1A41B24100DEE2AB /* GridPickerViewController.m in Sources */, EC73E7241A35CA0900E6823E /* CellActionView.m in Sources */, EC4C43021A2F254E00A82D8D /* TimeLineView.m in Sources */, ); diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.h" index 45623ac4..829b3a10 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.h" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.h" @@ -7,7 +7,6 @@ // #import -#import "HabitBaseViewController.h" @interface AddHabitViewController : UIViewController @@ -16,9 +15,6 @@ - (IBAction)addHabit:(id)sender; -+(HabitBaseViewController*) createHabitViewController; -@property (weak, nonatomic) HabitBaseViewController* habitBaseViewController; - @end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.m" index 3d1d5104..b8e56384 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.m" @@ -8,6 +8,8 @@ #import "AddHabitViewController.h" #import "HabitBiz.h" +#import "LineView.h" +#import "GridPickerViewController.h" @interface AddHabitViewController () @@ -19,22 +21,71 @@ @implementation AddHabitViewController { - (void)viewDidLoad { [super viewDidLoad]; + + UIView *navigationBarView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 80)]; + navigationBarView.backgroundColor = UIColor.whiteColor; + + // 添加nav阴影 + navigationBarView.layer.shadowColor = [UIColor blackColor].CGColor; + navigationBarView.layer.shadowOffset = CGSizeMake(0, 0); + navigationBarView.layer.shadowOpacity = 0.5; + navigationBarView.layer.shadowRadius = 5; + + UILabel *titleLable = [[UILabel alloc] initWithFrame:CGRectMake(10, 20, 300, 60)]; + titleLable.font = [UIFont fontWithName:@"Raleway-MediumTracked" size:40]; + titleLable.text = @"New Habit"; + + UIButton *backButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; + [backButton addTarget:self action:@selector(back:) forControlEvents:UIControlEventTouchUpInside]; + backButton.frame = CGRectMake(240, 40, 60, 30); + backButton.titleLabel.textAlignment = NSTextAlignmentCenter; + backButton.titleLabel.font = [UIFont fontWithName:@"Raleway-Tracked" size:16]; + backButton.tintColor = UIColor.blackColor; + [backButton setTitle:@"Back" forState:UIControlStateNormal]; + UIView *underLineView = [[LineView alloc] initWithFrame:CGRectMake(5, 25, 50, 2)]; + [backButton addSubview:underLineView]; + + // 绘制按钮背景 + UIImage *selectedBackgroundImage; + UIGraphicsBeginImageContext(backButton.frame.size); + CGContextRef contextRef = UIGraphicsGetCurrentContext(); + CGContextSetFillColorWithColor(contextRef, UIColor.grayColor.CGColor); + CGContextFillRect(contextRef, CGRectMake(0, 0, backButton.frame.size.width, backButton.frame.size.height)); + selectedBackgroundImage = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + backButton.layer.masksToBounds = YES; + [backButton.layer setCornerRadius:10.0]; + [backButton setBackgroundImage:selectedBackgroundImage forState:UIControlStateHighlighted]; + _habitBiz = [HabitBiz getInstance]; PeriodTimesPickerViewController *periodTimesPickerViewController = [[PeriodTimesPickerViewController alloc] init]; periodTimesPickerViewController.view = _periodTimesPicker; [periodTimesPickerViewController viewDidLoad]; _periodTimesPicker.dataSource = periodTimesPickerViewController; _periodTimesPicker.delegate = periodTimesPickerViewController; + + // test grid picker + GridPickerViewController *gridPickerViewController = [[GridPickerViewController alloc] init]; + gridPickerViewController.view.frame = CGRectMake(10, 100, 320, 80); + gridPickerViewController.view.backgroundColor = UIColor.blueColor; + for(NSInteger i = 1; i <= 6; ++i) { + UILabel *timesLable = [[UILabel alloc] init]; + timesLable.text = [NSString stringWithFormat:@"%ld", i]; + [gridPickerViewController addCellView:timesLable]; + } + [gridPickerViewController layoutCellViews]; + [self addChildViewController:periodTimesPickerViewController]; + [self addChildViewController:gridPickerViewController]; - self.navigationItem.hidesBackButton = YES; //隐藏默认back按钮 - UIBarButtonItem * transitionButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(gotoMenu:)]; - self.navigationItem.rightBarButtonItem = transitionButton; - + [navigationBarView addSubview:titleLable]; + [navigationBarView addSubview:backButton]; + [self.view addSubview:navigationBarView]; + [self.view addSubview:gridPickerViewController.view]; } --(IBAction)gotoMenu:(id)sender { +-(IBAction)back:(id)sender { CATransition *animation = [CATransition animation]; animation.delegate = self; animation.duration = 0.7; @@ -57,11 +108,6 @@ - (IBAction)addHabit:(id)sender { [self.navigationController popViewControllerAnimated:YES]; } - -+(HabitBaseViewController*) createHabitViewController { - return [[HabitBaseViewController alloc] initWithViewController:[[AddHabitViewController alloc] initWithNibName:@"AddHabitViewController" bundle:nil]]; -} - @end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.xib" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.xib" index 60d5ed82..f4a17f29 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.xib" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.xib" @@ -1,7 +1,7 @@ - + - + @@ -17,21 +17,21 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/GridPickerViewController.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/GridPickerViewController.h" index 8ae662ec..c5e78d0e 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/GridPickerViewController.h" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/GridPickerViewController.h" @@ -13,10 +13,12 @@ @property NSInteger numberOfCellInRow; @property CGFloat horizontalSpace; @property CGFloat verticalSpace; - +@property (readonly) UIView *selectedCellView; +@property (readonly) NSInteger selectedCellViewIndex; -(void)addCellView:(UIView *)view; -(void)layoutCellViews; -(void)selectCellView:(UIView*) cellView; +-(void)selectCellViewWithIndex:(NSInteger)index; @end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/GridPickerViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/GridPickerViewController.m" index 515edbac..27bde973 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/GridPickerViewController.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/GridPickerViewController.m" @@ -12,6 +12,7 @@ @implementation GridPickerViewController { NSMutableArray* _cellViews; UIView *_selectedView; + UIView *_selectedCellView; } -(void)viewDidLoad { @@ -49,12 +50,22 @@ -(void)layoutCellViews{ } -(void)selectCellView:(UIView*) cellView{ - // TODO 加动画 - _selectedView.frame = cellView.frame; + [UIView animateWithDuration:0.2f animations:^{ + _selectedView.frame = cellView.frame; + }]; + _selectedCellView = cellView; } --(void)selectCellViewWithIndex:(NSInteger)index{ +-(void)selectCellViewWithIndex:(NSInteger)index { [self selectCellView:[_cellViews objectAtIndex:index]]; } +-(UIView *)selectedCellView { + return _selectedCellView; +} + +-(NSInteger)selectedCellViewIndex { + return [_cellViews indexOfObject:_selectedCellView]; +} + @end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Habit.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Habit.m" index 4a60bb4d..47a8b39b 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Habit.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Habit.m" @@ -35,13 +35,25 @@ +(NSDictionary*) iconColorDict { static NSDictionary* iconColorDict = nil; if(iconColorDict == nil) { iconColorDict = @{ - @"start" : UIColor.yellowColor + @"star" : UIColor.yellowColor }; } return iconColorDict; } - +-(NSString *)description { + return [NSString stringWithFormat:@"title:%@,iconName:%@,period:%@,times:%@,createTime:%@,doTime:%@,skipTime:%@,nextDoTime:%@,nextPeriodBeginTime:%@,surplusTimes:%@", + self.title, + self.iconName, + self.period, + self.times, + self.createTime, + self.doTime, + self.skipTime, + self.nextDoTime, + self.nextPeriodBeginTime, + self.surplusTimes]; +} @end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBiz.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBiz.m" index 058f6fed..ea03af12 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBiz.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/HabitBiz.m" @@ -55,6 +55,7 @@ -(Habit*)saveHabitWithTitle:(NSString*)title iconName:(NSString*)iconName period _habitArray = [Habit MR_findAll]; _habitArray = [HabitBiz sortHabit:_habitArray]; // 排序 [[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait]; //持久化 + NSLog(@"new Habit:%@", newHabit); return newHabit; } diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/airplane.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/airplane.imageset/Contents.json" new file mode 100644 index 00000000..67057b66 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/airplane.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "airplane@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/airplane.imageset/airplane@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/airplane.imageset/airplane@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..bddb43382370d315c19c20560e82b357a8a30b82 GIT binary patch literal 702 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 literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/apple.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/apple.imageset/Contents.json" new file mode 100644 index 00000000..3f3abd28 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/apple.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "apple@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/apple.imageset/apple@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/apple.imageset/apple@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..d86d8cf5c71c2a45e997f34762cd55b50213d8f8 GIT binary patch literal 943 zcmV;g15o^lP))x9DoCG01o*6WOuz@fzlReS?+ST!B(0l zX_^M$m;?Y4040D1z{2T7*Gl?L0CUM`+>Smo+$fb`u!=SSUK-D0WVCF&+a%Wj@YN1L zWN7?X^-j&u6R?;ASK*-&QW+ertnb#>wQoxnf`DHJkor3LKRVzv z!d7P59}xQvVu?J^^^E3ld7{fClTtkvZ}kUWJ4fNIo#c{+Nup`^BJm)9u8$=Vq`Rdi zXL-G}bO;hpg=dY+Y#QI4Fv+vEvjw1Z#GqEA+AK|tPaX2;MA3M(>`qNWe{w9WE1|+1 z4}iO*4St12f|L4#;FP`ZYI3V2b5()Bd|mr84J4K0Y%>?MjswUwoYp=e{Q1PDled(X zLF7rH6Kl*pQUQ>A0$?q(_b_~|R(oFRZZ&D^CnP{#WfGev!oec|(ZM`0sJ5tl1^|ty z`CS1200030|3;mrWdHyHRY^oaRPC5i5yK!1h9dz9NI*g*R00wzVGdRaIM^iA!78B+ zsDtf=haF>(tgIw=e0P0Id&!@KgaUl>6!c7xCihMeNdgQB|J6|eHsJyc8T$<*z#?3L zF=M}A1egU0pcDRIGWIh@04qoUY6V-209r`!-^$q&D<;V*K!8*^n~ePm1SSCjjKuS6 zq6i?N4OC+OdxCut$2j;q@$`4_1DvbCCVZ`O_(`dPxSVgbv;VH_&MbIG*jx4^*~j!& zi^m|x-ZS`K1ulER5(V#T&HWOFNh|2Lk@qN+zJbbECcSS8!J~KnUubnx+(Xt&Wskn` z9ihc&979$;aYFo!GY`c(09+5;4*!A*j-4TZM~bAN0US0(2aRcYb)J9;!^wY>w=X|L zo1#t{lXI(nr(B>Ma&xrE1#1uA)F22If^*T>TtgOhB-$Lc(Hh>h+%w+kbUK}mP+rLp R@m~M{002ovPDHLkV1nZai^u=~ literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/archive.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/archive.imageset/Contents.json" new file mode 100644 index 00000000..b8074862 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/archive.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "archive@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/archive.imageset/archive@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/archive.imageset/archive@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..e49d5850dcf7f5a04deb24716bf7acd3b0b9b75f GIT binary patch literal 621 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 RC;`3B;OXk;vd$@?2>|C!1Wy0} literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/basket.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/basket.imageset/Contents.json" new file mode 100644 index 00000000..be8ff952 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/basket.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "basket@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/basket.imageset/basket@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/basket.imageset/basket@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..52b7bdc3bd91bb8ddc130f131ccffb9e8c0a31e4 GIT binary patch literal 530 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(*&FH?|_N*0<7WQ;;40#it%iC-qV9PnxfYW0Ji;4mxkYX-ykmX^Y zdO&6i-;Mctk<+$cTB`lFwff}WhZ!%e-#wn{p&-EV>9LcGvEbT!Y5#Suou9WybNdK~6-M0;lP1!B;ZMQYpcAR*-=dhgGLKdF#Pqhtmsb%%FDW55G z{XvN<_u8+S+&Q6r;ZDqx2xrN}zw>em*y}g`O|0dHl5e)tO^d`d*v8)*x-(eGmUTS&H{%OFA99Hm-Jj6QNL2bS8(jWs(|>? zLc@VUv7uFlie(0nf7{c=G33qkznskm0!Qz2^j#3#HSz9(yFTU~W+yoM z1k5-5k5Tlv6%&wUcdwawqWHP*%5pLefg-MfA@6rF&S209n!M+=+8*`|Z%=(^O6+U- zf8`D{!++)jmzW!L16dpx;OOi-tF_D?@2o5t+!);Wsw?HP@0Xe|uyOuAn|vhr>AJ;? z2_kmEuY0^D<+%J`bP0l+XkK!Y7=v literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/bell.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/bell.imageset/Contents.json" new file mode 100644 index 00000000..a4f2a395 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/bell.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "bell@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/bell.imageset/bell@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/bell.imageset/bell@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..e3a74dc2a8ec9c40d124e2fe1d1759bfb6155b98 GIT binary patch literal 829 zcmV-D1H$}?P)flL#HZHu2t{xHKB_kVr9TA># zZWtpA@L|Q#lvNO5nZ{eM6pAi!P!uq*&-Yh{;{M>JD1hP|aEbyvg8=^*pc~bOs3H)c zIvlkG0=iOr0E)qACJ?ZcG6B+^1BOVzGsmkh+PR=1=>F8U0yF%no8vbC00960$QK^` z0005NNkl=jG!BS^;^5T*H~s zJS{COh8;yZMLb9uV$7;@4zyd*>3h9W0Y}5aE^msR!3Z5G*OhW}M|feQrf_sv z>a_S6u^Y=>U2?2~`$-+hUBx^p-id>=Jy&AX0S6Ob16b{gw2k)`fu}W_X;XaDY?8fA zYmzx^ne4cvwMuRM=pa^*7uXnD=FV>tHkMdo<46p>L4E80-pGCdqdk3(00000NkvXX Hu0mjfbq`v< literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/bike.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/bike.imageset/Contents.json" new file mode 100644 index 00000000..7876def1 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/bike.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "bike@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/bike.imageset/bike@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/bike.imageset/bike@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..b1cd1f4f2ac84ff587408dec6483d2bd7b65e526 GIT binary patch literal 961 zcmV;y13vtTP){v^&!!Qh72!UV-4?-Y>!83yff+3Va!{C)c!=Pc1GH4m(UD6qk#!mdV584@BdXUtO zK5GFC27|$1Fc=I5gAoP^U~{k)Kp*J;?dV_DAYgJNU;{7*_}@J2U4ww9M}kv;|0OfQ zQRqklcL2&_G9rf5{OIkl5dU3i0(wHgPvLld?E$DrLb>sXY^UV77wo@*kS$suK<`JD zIo4V*mJ@{Mib`dl8pF<|Bum-aiUPbI?BbO6F~pE95HMQ^P>I{jB!eF<5I_Y`j{Q6l z(KENA0Zf8qB$~WSJY;+F@T#fN-0NgzG^6$Y{T0Q51B%((|-XOO9zc>>y zI9^~(#|UXzlRop{O!CTz{D#o;mj3RZPXft^d7w@tuPwiq;r_6k_$=nP8XW(&)Hcxwx-Z#WP&(Se! zy66MP@5OLNMh&xQYS+d&kG`D~;jYR25FMq^CU%pN-;_K%LEJ{*2M`ssIDZzD^g>j| zWd4VVloTP3UrPkTDniF?9x@g=3CAOiiUWW}5IA+PSHubE*epp@H3W*EXGl}H3Ta9S zb^+ENdi<#s!|)QOd(w|t}+Y1+E~L#epUfA$8zkXJAI4c za`=r#0fJDexecV6((NcfmBTL(g-QFcH5SUCbbehFQyTcVX!f1ZY?1tYX8P2**UX2= z;irM*hbM0zY;fCg{<1_y?{9L>%1L_#ZIOh*`T;ex< jA-{rxf`WpAf`WpAf-l7{3$tSQ00000NkvXXu0mjfd3>aH literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/book.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/book.imageset/Contents.json" new file mode 100644 index 00000000..16b9089a --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/book.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "book@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/book.imageset/book@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/book.imageset/book@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..6d19178c2b8b6c6140dd6d5f4a69a16c18503af6 GIT binary patch literal 1432 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-eX{3R>=&B zD2ed(u}aR*)k{ptPfFFR$SnZMGcefLR}>^BXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8 zz_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3diNuokUZcbjYRfVk**jy_h8zii+ zqySb@l5MNx2(nNi!Z$#{Ilm}X!Bo#!H`&0@P{GVh&(Orw%*;?n!N|bSNZ$a6%ybP+ ztW3?UjLa3FKnZADQA(Oskc%7CE+EfVDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMpj zP=#)BWnM{Qg>GK4GRy>*)Z*l#%z~24{5%DaiHS-1r6smXK$k+ikXryZHm?{OOuzus zuShJ=H`Fr#c?qV_*B8Ii++4Wo;*y|LgnO|XTpUtakg6Y)TAW{6l$;7wt_-rOz{vjutSzF8Rr&xv6<2Fuf@V zy~a58f)Yb+0nlcb)S}F?)D*X({9FaFr>!z^yTt&fc~HG6xZPriQ?EYIG5VmWMT%;e z5HS6KnDB%P-L107<`|xryn(xJgW@ zEIgTN15_lF>Ea&(q?v#i1QdW+14;wgjNCWE4>SV#*F9YvL*7iiE!bor;Oft*si+#z zBVaw0THDoYuF21R-@qNfp0IKCHo12mHSBj9>liEcRK0%r?VNr%TYKD+JIeOa7Foq^ z#<#ic*>`m~^A>FWb@|1lkK3k4`wCxNzxh}E=ly+WN}u(F;=?IRsn?lk^tKXg1Wx-WyZA>iM+ zgF-LNB>ER`p0n?@^RM@5pVlif?BkYRz+|LQ7-P_RHgsFrd#CTyOMUv@`o8l8Ida;a`kI^Wc%Nr(&# literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/bottle.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/bottle.imageset/Contents.json" new file mode 100644 index 00000000..6149869b --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/bottle.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "bottle@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/bottle.imageset/bottle@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/bottle.imageset/bottle@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..b3ec3789a641cdb5280697d253376450cc4cde12 GIT binary patch literal 423 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(zeddVIvdchvhNp{T$eSCEf(H}?m=Ab3a0yLlYVkV2IcWv6ibCVQ zU-q{yNje!7Gi{QY&-~Au@j`E~!wfqMri9a$0smMEw^dg%ayT$B2{bUUC@{d7X6yxQ z499r{co-Tb6(kviKL0Xjc1ZrqCi!h~Mw)hg!XF*E$WzDJpJoc&n-VYgu=~?#r62sK z?>`P_S|QBvs&BRZU+oy6)BgXz#S&TuWK06N@$HR`ye$Si4j1j2lsB9-JeA8d`;OMl zmfH*>hn!A^Xx0W>OI85~21YN&o&(|$k0i4l z_FG){|EgMb%$&jItsNr^ND`g!V2fy!H(;KB;^Crvi>uFHM1Bm9XeeT^E&N%}+MvmH bHll7<^$q5#7txwP*D-jy`njxgN@xNA=5K|! literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/brain.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/brain.imageset/Contents.json" new file mode 100644 index 00000000..675ab761 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/brain.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "brain@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/brain.imageset/brain@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/brain.imageset/brain@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..350e4d32ccc6719dc7485691be85d87b21cbec53 GIT binary patch literal 991 zcmV<510ei~P)Mn24RD;f!Tm;5H=tiq<_SF)RjMQjB#7Nr(YO@ z&eEL_KpYbQ-T_SJx@C~LQ6Jq zhjU{}C@3G?Eu>dO2;M}v8AFV1NcmAuUnmcsBLbi!-ilclBnvtVvNCe;i*pJwZIovx zQ%^UyC_^ll4%s@t8oXNDlX87L5C9$9PazedVfy@a?LQB8PKw)*WY`(hY>Kbn|ZB!-#fLfYh8Y8c{LB{C6+V(yZ^31Vxy%k_^VB90UGL&bt z7XT@h!EgisT&MW&0N}LuPXMrWlVzfN6fd-)0g#?dS|y+Yo#W)nIsLbMS_;n}9-&Sj z%&2U0A23=P4VTe*ED(B!22Q+E`@Wr&*qIXsDobH$(56?WKcPlT8G%?4C=K-x#p?Sa zTM_Bv9lrldY-x{dgChON-Y)uHPzT@u9DoDv)5lFGb3ma@%8{9Tmo@(DnKxNNj?DE97Kxv2;6clEcu++V{-<%Ew2S7Px04q zguD|&ct-#z1SjuA-Wh<_w7oq5NFc}rKp*OG>_sG47mByiMVPT#v|lLSD?!AFt+=tB|TF93SR@^{kuJ{Fcx{zJ&c7XeC8an2*H>!juJ z`_DPcZwBxR3;_FQxOY(M0K7dD@xTE;PvwhWa-Ee9R6bBKv3Yz1i^&8i0Gl4*(AU4*=J_?*s8!@QeTe N002ovPDHLkV1h)`kbM9E literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/briefcase.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/briefcase.imageset/Contents.json" new file mode 100644 index 00000000..c7d2fe25 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/briefcase.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "briefcase@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/briefcase.imageset/briefcase@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/briefcase.imageset/briefcase@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..9b0608f9b320db62005ba7c849092200ad01f54b GIT binary patch literal 480 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(zedFG=qIE!eiKmNW$eSq#c@G%~uq zZBrDw-6uKA>{fnzd19IldynBUiR7dmOy`?-Yo1=-Td=HV7l+`dOrvPtvI~-LfC{Ta@l9Er;r(EGh+xOS;ZTghU z_kaP2ZZURksA1gE;ihp__9%yRiHk63GbNS8u6us)2pP!%W&+t*3oaxCKz$p8mA+4(0ulj+V;|(j`Akkf) zZ5B8lQ=J3N!#B(Ky+@^9px u>Q|feL#;#2vh7qA)AWUWD|WaQI|{VK?_pS$vt9rg5DcEKelF{r5}E)Scj{>X literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/bubble.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/bubble.imageset/Contents.json" new file mode 100644 index 00000000..4dcd2140 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/bubble.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "bubble@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/bubble.imageset/bubble@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/bubble.imageset/bubble@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..e70007877623fbcccef31685dea2be3a41a1a4e3 GIT binary patch literal 621 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(*&8YnLQARb8|K8KZG33qk_q;K=T2XOEOFgR#iIB+w}eZU~g za@yFi;Rgf%Nyd3VAOHVIq+hE{dX0ckB5Fnz1ypMfMZXqo$>(%iw4F8qB0KL2`uah1rd#( zrm^ll!0;=TA?nk&?>(1p-8Xmp^s1Uob8kIwXodR*hofwz2N|!tS)v`V@3H%@pz3{F z1o%!*7jW9JNBy{P^6B{(56o%&@n+vwkr1}2afL=J&wZQK?csZ;Kv7d>_S)O8L;Oxq~tq zRhw6fKH2x`J2SKAw@34AkDl9g`l#A9hoYk^tk-@?jh*y{J*c}*0vIX`p00i_>zopr E0NGdoJpcdz literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/bus.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/bus.imageset/Contents.json" new file mode 100644 index 00000000..7aeeef49 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/bus.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "bus@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/bus.imageset/bus@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/bus.imageset/bus@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..804bc503ba595db92b66d51309f27b8b5e65c6f0 GIT binary patch literal 624 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(*%~&Gwc8v~@cJOp@40$snk@t{+KI1lIsUY=bn|8rJ= z^R^5I9tN9*hTCdZto`ZsxcXA=vr8gb%Z_YVbnLlQ(CqszDu2s#)}~LMbViKfz%rF$ zR)zx0$(bw#r+@z2s&$I}RujXUBFP0|u96QoDliMR7+;m<1VL`&v)Y;z}U#{{~Y%t!Ow%>_izTR15d-c@<4XJjw=d&qDYPu;hMBTOL zci0pf%EcJ6Cbc6=?Nk}#X@-I@o`e*Jj-SGN#CF;{Qo4zJJU!?Z%WI1z*=S$yME~gLAb~Bz@u#JVG;`3dG%z)X<410bu zeBiQRy!Al&3KNjyJ?)^{%ZjMBz6B@OpLp)h0W=8#eysXy^WgkvMurEk7@nt`uKHec v^&rD5)=yLI@3dZC_jcZY374(z>uwiD{5bW;+U>Y-4M?k}tDnm{r-UW|%j^CY literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/cake.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/cake.imageset/Contents.json" new file mode 100644 index 00000000..caad995c --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/cake.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "cake@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/cake.imageset/cake@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/cake.imageset/cake@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..f066540e953950fc24167154d2a7679a16bb2371 GIT binary patch literal 884 zcmV-)1B?8LP)gD?z*-v}9jO)eXh4cZNEgm!~=gLZ?k!Lb3|AZ!2|a6kHx_z{u=CFQ7N=}Aa{ zV}F>$1YkQ;0Db@%9*Z&spaC#YjWh_;89)ZGU;CoY zl)-D?Z`ANdP46)if203@(aRqJTp47yAh}rTIQEsX6z@pbY?SO0C?*yV1>hU*4a~i$ zAq=(jY2OnC^o(@P8r?%xp*Yd3ao*##p?L#v0Z{V8riic#6!cZn_l;xqD`P#oDxz3e z>NSJWSpGvJ<}#=l!v+4`X4k8srcP|&hL+@Ge6FVM12ki81LN2c!Xxmc%N;jDWuP)1 zm|51I2{$LU=mho5&=+00}z?GQ*x z!^fN1f8=F%3E{m501prJ0B!&Zq#p&j_MY0j9&*tFr~zC6WFHhO$e|{uC0Z6Oaxs#? z-7=<#bYe^%BlOO_#z@?wBzesEl-ddOD|1?PvlMX}a2jwLa2jwLV50&s>`>@HZIcF= zkO0)iMQdu1mM(7tOk{LUZRBJO?Z_g1moN~;0HkY;hsO_ZI{##r4VWX zd?h{=D#&rpaAfi2)bd!B+&EkL?HaMSfN9WMO5xTrr+zXa^2Nnkf3xzQy+CXO^nt}| z?4aHcfif4$a6s{ceQ}FK>iRYN2l4FJ(i}j1<5M=Oon4M*E+FO>8{ZrMG&*VsF46@1 z?cc;th9<}A-OZdaq>0$~FP#%KYY6rY=?q4cHO%leN;_+mGYF9}3I78nyC@I<0000< KMNUMnLSTa2O?-3! literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/camera.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/camera.imageset/Contents.json" new file mode 100644 index 00000000..82266348 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/camera.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "camera@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/camera.imageset/camera@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/camera.imageset/camera@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..fd893f838c2096c544a476ead7a2f04fdf0ee790 GIT binary patch literal 786 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(*&6vU(wZ{WU8+f`nhP;W$z@)9!>z8UXGeN-}CB_R371o>DYVI-3bbj=Iny0!v z;|vMb85(U7S9+eLuU~~IE@hf-T&sQh$Cv=q5EYLi@<=CA_ z2IojyD)IuAo z9=CbOe^_ds*N~OTRHDszTDb1C=>EAPj6F*qu56BsU(GhVUU?y>nAp;-htGRQCy9h} zC!DT3TCgj`C-gy0Fz4e7lXi&xW@cdc|Nn_@!b)J+rGmolZNx?1W(9#-WdkPVl4dI} z^A*xpcwe!Vu$WH(Ql-qh8~+|$vavn)DWA^=)$hql-z#K}Gc!mqKWgyb(wMC0>ixu; zrEll2Rxc2QL}xj?u1(5Jx}X+?95VHQ3;|3_>O`Y0`A)KYn9Fu2`e0R2h|IhskyT7bRhqu`td|U{e^QjM`)9?>)AN4c zZCvYfmg(lB^I03_wV59*xRrIzt@M!57GtBbwAt3**M6Dv`MpKqeeE5)w>HZ3FvM@% zZhh3EQ1!<(jkG8>hUpH9Q>2pxo@l zx#z|jp$C$d52r0+Z%|8Sob@v2+(xc>@8>yNoBr}SweRP_g10v|Dl_k4@Q_i;0w!Jt MPgg&ebxsLQ0P%e~-2eap literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/car.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/car.imageset/Contents.json" new file mode 100644 index 00000000..1615010f --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/car.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "car@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/car.imageset/car@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/car.imageset/car@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..c1a27047c9c91f09179b84f130a3f4e81d0332f5 GIT binary patch literal 476 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(z{fqmXu@{g&=IP=X@@D2mPG&0UP=lU=gF353 zxB913h0Z7c6(8IetjZ?4DLK6JV1t^XAoHnzMurP=JB}wD5Ozp*xGmq`cuKS9cZ8$o1)J3@ z=@)Dj51%Ymo!0cQ-c!Hr!u0bM0WM24CLfuXvg7^hitiWsO_rHAl*=>xV3~4LN=%NC z;a=^XE6Vrk`t6oEPv2y6)i{u0UhOQg_v??Yw9{@rw)p&pPn&sw)`7qpo(F%+uUkK? wg>XUSG}ax`)8;ZVJghC+dt#FgJHwf4?E;@3+noC$<_(hfboFyt=akR{0O+i`)c^nh literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/children.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/children.imageset/Contents.json" new file mode 100644 index 00000000..765d13c7 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/children.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "children@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/children.imageset/children@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/children.imageset/children@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..ef3fcb3ea9e7328d743e98c0d8afd934dcb16ae6 GIT binary patch literal 2020 zcmaJ=eOOc189zygd^kRWOc52XQL9$+4Ht+6LrB0t1A%0Zv4|3r3k0~iA-R}` zTj`@+Rr-NYKep8&GDHP&kh=LWQ4pj!tCWRlDaBP%aU&ufyP;tF$Jlx9x$k-3`+I-y zd(QdYL-N!lU!M>k0DwnAu1G2e5P8$U#eIbDE8Qy2Ags_my%rJgbGo7-04Qs9N)@h> zy}{RDC{wM)b|Xv+Y9PJ?5WB@huEocv}Y@(rE?sZILpz%#eWO>9&>{ z5k+aLQd3%>iP6%x#6htZK0$yYxEivcg?ba;BB0Om@`<%O%%VfH5WGM@k9QY@R5Ce~ zfEf`elF4Ie*c=W7!%R*@Bn)%HAugN4WwD6|W^f|-kuaYd1vN$m@F>Venmq8#HrV>4_wlMUjHS-K&#H2Cm47d){LvBX( zZmbv=(1}ie+yZKNMXNW>9TRb2EQ{K};xO6nEzJXEvi}c7(N|~_o`L+-@Bbt=DN76p zD+4iM#YPQ6z}L7-8TbiCM2%xcC59EwpQ1bu!!c7HW`GhDFtkCY*68%^z{c4OnT#*h zn{c&WgGj{!I>Euz>9qVPm>rQQ;ju+LaU_Q$;ks>flqfnrI$pw)aM|;@VoXzvB6@s2 zSNl^gXTe;z7*GRIS&SHUdk}4+5ksNbP4jgN_QI7c$Tyd(U9cB!;)1y>q8XO^YJYas z^C3b%?&T}t63#2>BYHybMnc%8q5n{cpJF*KQQ-4OIQdFHw+>KgWQgjoE zB|s~6;xr{;$;5OIh?pDZEU_kkdZXmaX2POUalG=M)q=dB_~44L)BBGkPLt58y2@R^>#CrG@c{`wR4QjQizcHfyaW43UmPqQIhA*B zBrAC7(>=NW&WX9%?)?0#+dbEKcLsZ`QAajyYuM3h{My(XTIZzu0fqo%Lbz1{? z_~7H{7wp$ob{a!}zwWsTG>~rflU>6k`}%`2jGgn%g=O2m7}_4`50-{^vK`ScgwlRt z2$%>3w=-Rne5S}(6%jWHQ|zYfE;U<`U$D3?=|al=rgWOYC|~)3s{`;x+ba9v@24}r_Mc>wg@KQ4+Y-M# zJcVrstEO1$q3~6U_K-Wm%l1*)o_9R1O5fSk8rc#S_wl6O}k?CvK46t4=*C_&dpFF$23V#37{>1!U z`H^7w&dk+RUmI%Qkqk^@op02W9a5FkAAp&e`r-N;0FchQh4)=GCqviK~I@ zqq~z@xd0o#GelvwV?@=6nEz5X;t(0N^x3?IzgXFebU@IT4zBFC`=d^z$WgUGO^p?Vv zCF;7B+5}KIKeN0~M*KJj6*l(_M7A zthol>**(}c_St5iSW2;@uc+x_LBrp=%hHvvA4@))(S0{8C|vqJAcj& literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/clock.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/clock.imageset/Contents.json" new file mode 100644 index 00000000..85a7714d --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/clock.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "clock@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/clock.imageset/clock@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/clock.imageset/clock@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..d128c70037a3607feede6c109ba1f2d0a7fc9602 GIT binary patch literal 1017 zcmVw-k-ghJ4R(gKFQ4fB4qPE z+3YSr_+fx8a0D8l1$y8)v0k1vGIuNQu5y&X3Fux3wY5&xDsvZYfUh^F>&traVR93G z1crdZr#6Vs;Su}ggFpQ2$GTKp+P;Zr+>5`S^n)CgRG z8rZxE*Fv7vGIw-wC-`Wys)hDzT;!_VTgjT!YVMXF?AsjSeH3Swv zxAxL;Q(lFS*R@tAJd+^+qfCso>*>2@`%nOWtHa_bs9fk}0zezZ)vFih{^UG7mAlXY zG*_Wt5;~Qqj2#+)HVR6cmUr~n?8E?I6dzFkTI7yE{d6J#n%PYUg#Z{AC1Gab z6#!ra!1)D9$OW;?<~%Tt4dPp95?Ut4uy<|*fF>~#$~SS0K>m%ZTq@|8goM&__kX#p zxdYLtqymlvu6RSavIn4Ns|2jo(6d)0l!EW-vuZZN^_PE$gi`3w<-fdBvV^@~#ig(n zB`IDaeOAR%6+Dohb-uH|St)EoDUt99&^rH_y$}h~;;rjFT6!Sql=p=Fa_xjUE@$2~ z3Ssc=jG)~eMu+^0vp|gl$O_;dSq+9TTypZh$Fz=sBY^L~L~MnRj=2PT%NQJiw+qyd z=hDb&lbcWA+tAWGL&Bbnj%M-eU_;92w>$aH9(Y5HrDz0COeu^$c2_DKTBPP!e0KXY z@9j3B;w{4ee<8B+!)jPuj<+#;bFECoLYM{#nW2YY=rjEXDca!D00000NkvXXu0mjfFTlsD literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/close.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/close.imageset/Contents.json" new file mode 100644 index 00000000..42e813d6 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/close.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "close@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/close.imageset/close@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/close.imageset/close@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..2e1ea2c5981e57ac5c9e41f731f740439167d789 GIT binary patch literal 599 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(*&8SlwTlxyf|KaK47;@#pUBN>N5-t~YHC2~Rp0cUTjnk9;mym2} zQp<^?pv#vcDI9-(H$vv)^o;7>E1EE{;DNH*!DJ ziQ{anH;Z#x(HZWL@bs8k%d{UpEM|FYoOTG!Z#>W~?JrpMNLld4&W{2ImF$=r-K6aW zbROFZX6*Uc8qg#E&0)diV@wRQFFy|BD7mwp@xYrOj`~b4uxVC(#P;J># z!P@c#=#H5`cvyD+@MxL+^Z`52>;M0E#XSB5WIO_e!PN`5c@HZHuwK*zhJi@=qiZh? zyi@q8I7#^^-;COrbzAm#7$@u&t+2e`^+M^xCPAf-MS?~jj0BB7z7!PskSRFj!$U!l zkBNd)KE4x7JFwez24}upqT8NGmi#}P=cTl8{7Emusz=PRCZvTmLHMY<%MFGugL~Fa zj1>&K4en_lihCR3{^3Bh`;SA>ZXb?ByZ-3h-XYK^-&@cr-zm_!UwR>Dy}A?IK65AW zed literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/coins.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/coins.imageset/Contents.json" new file mode 100644 index 00000000..1b7af45c --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/coins.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "coins@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/coins.imageset/coins@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/coins.imageset/coins@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..a1a6d996b10ade8e1676a9c7bb133b5db29cd774 GIT binary patch literal 1151 zcmV-_1c3XAP)7YkH0005&Nkl{!vQgD?!d5i$ZJutC}2F#;R38^8wb2CzZj2JHsv2CzZdpzr4*MTjIoLy{+9$zLRP zZ0w6Kz#)ema>zQV0Mr2P03HA&fR8~X*W9_M`ftJJ0Im$;VF`4tDtlM@NJ<3%RzGv_ z7k~~x1E2&@I0DGIrsSTEHl}ua`V_H)uK~QZgAD*~48pe*v^{A4-aJEa$tJ!0+$m^V zGM*Fc$U>I9)c$x8u>uRNB4ntR=(PS8iC~bzi7tdg1$HT+ajt>m?(#`E0iTcwkO{Sb zjFA9UaS+hRC)(~U{>PBl;1ZPpT25;}48k=E zpSZT>Ub(_w7YcL+k3`3p4k1A~Gmw;6`kIWwu1fRH1!8OOzy`@ThO-aOAT(!+{rx7` z5-w~yZ*3V97sz-$H4~=hv&?_k(T7pz-8tzpOB>jrOM#ptM z*FuXiBQzIi7gWZDi4umERh8+gqIyjN_T~b@GVP5FNNfb~n!XuHaQ7i}yqa5MC|Scy?<$Wd;H>k^s^lwStFH36#a=8}-dqk9oK;v zT7YvlzEzL|fb==%*jm6umf1yo2LJ;nf{cxkwSaFGs0`vNbUyJAnxEAIXG;tCoae}- z#v&sCZW1)NTvMgNE`3mC03evKH@kdMy#oZ15P)I^|L-K&w_oOrAQa-;acf%@ffzGE zxI{|Aq({(ouYOce64Pe@aegt{d@xB)vQ;MOl-Je*uD?O1T+=&>-k$^h;p~Vq<^<}K zPNt^7->3$KTAg@R>6PMccT% R(DncT002ovPDHLkV1nd=@sI!j literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/compass.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/compass.imageset/Contents.json" new file mode 100644 index 00000000..7649ce44 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/compass.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "compass@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/compass.imageset/compass@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/compass.imageset/compass@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..6f421bf04cd78a06ec8023fd687416c64ba52d04 GIT binary patch literal 1155 zcmV-}1bq96P)naL-B5cZ z87eo!&j99#hJWsvWbW>WV`9UX9C6&ka7~2u%4Bz>Q<7DBM12C#0H^>Mi?W)YRrK!U zfrc`+@fQb$1~Nu(L|R2>N#$N*8GjQh&{HHsFGFWbbhw2U-U=gb5?nzeL`0h^@=tQ$vc!c`FUJu9?AK$h1nY`D4>t;QA2BU9UROIn}*jkiofC-h7}#Kd7Xkj~!yJBNZoQt}Q$L5=4iBLz_o zk`nph$oxx{<1^FwUd3F;fA+U2=K|9@z{EEOQEEn};+mexqY8T>%>MwPiE`qaq&i?5 zc?vk_4C#c1D~j$L@4wXBK1hho19vW0`bNMAr^F@QPffokpXOzwPCZuuZOPO9it$R= z$&G=sgXU0XQ#4jbRyt0h>Od&4+8M(E9Puc}NX>yzuxRHm00030|9xH$?*IS-2}wjj zRMl8(afC1s{v;p)3Fn|VC=%*`lMo3w=t(#S-~b#12gL#Xv)5^FvYXBG=+0z@nS^AY z-#!4~U{)%%0CvZ{jprX1FSiW*uyU4C000=ry}fY07x-yQDPSw~AjsO!USJt7XlRdP zbV~F_*PR;x%*y9$rG$6lemZrul@l(M?oNTVZxrM1d{;(|D@!#0uDSQ zzDZETSAZ9A@xT5)G-d{!5bN9`m7pz-77fN-3Z$M8x(Mm`NC;60d@tHmHK87b0;P|) zNh*M}u~N$mVu3Qo`d4k)S_=zOfHE}pcL_jEsMacw4=6*u*@QMPB5+hB4k%scju`7p z%}YuZRy%BLjxu`oG$hSQg5e7f-FsrfLXk$R?^rf`%#T93=XY}NZkoT|xkL!O9$womVC-)N^vW>h}PLhhs z8#t9G@J`~r6s)%*#H%3Yw!%-2N%QZCCp6^qGTdV@YSXh6z>I?z`~JV_}##i_wLNA@K9v{lZr-tp2wuS%8z# zh5J{(`nUdD$pNqS$5;+%McOSgc4b%|u>c7I4 z%&W`(yA?cJrpadf@bU7nMadH+8B$iB?dLhWJ!bXx^#?c!Y zzq-2{lYi~5pKWNt$zb#N%d$B}m7EMhj~^_O*|H?=%YI!pd0^Q5{~z^uofDAp926*T zr#bQ-HsEpPT`0h&2trH?1DF&AxDt7y*fg7`IhNgAax$7fSp0YT#-;TykA8doKdRZ0&#_-?uqRp3f@-#3SFt8n9kZ6c2WoN(b_8jPC22WQ%mvv4FO#qbc?@<5% literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/credit.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/credit.imageset/Contents.json" new file mode 100644 index 00000000..82b6ac0b --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/credit.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "credit@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/credit.imageset/credit@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/credit.imageset/credit@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..6226174626bd6d6400f6ce7edfca4f0b69d417d3 GIT binary patch literal 316 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(zJ@wje|7IYa=;`7Z^5*(M-UbB$my4Q>d`pwP4mHn8*uwPfZwmK} zc5z|PNlR8MpY$*?-&>gf=Zcy9KlY1Z4PKAKTU0#tE&lC{`}#FL{-91B&@3QuIQU-< z!UB_8%yWSB|NpaWzwiPXaUjdyUUTGXP!MswxV>fCi%I|cvL-38_BJi3*R#0P=`J`q zCEpHa06(|hUR!=B?}H!{!vp1ptUW)yCS8tU|Cx5R7k9;<2@lqr-I7k#^9*<3zoV@7_uRX0Wn0}JEuR|Zm%I7sm-0?^;X|(T z-b(B~)OzPxblM+Ap98EJxnZlP9=P);Cc9ky^VU>%nIQFgR;dLY7g}3??pr4E@LA+b zwUpD9eJPJ`N^W1gAeXJSj7;U zq$Kk6jd(-(U-1JMrytSbxW;6`sG-!Lr%|?>DPw;9ZqD`jY;PE2GzwTBG{>B6ka@rQ z#m&=R`LiC|pYP5TQuTe<>-?o~(INTU3&mU8Z8vVc zde>rmjW(y)Ag}NC#q(FQuC%{k_`^)S^=^f#KWaln&Fo3nha8T&VlRvoY-A4C#zN zGd72O_HI7AJVs^N-+L8dy6p)J4m&=*SYA`WVByRl!|rgd{-0#}DPA_^J0B>tPDMF3`?aL z+_-xbEv_xFVtCD|yk!%E4sYbcpWUMKZid|uX56rMuS=Z|3qwx6{!ICuW-AyE$Yo9X z$;c2Uz)-!`^LhPgPR0aj>6d>_IBKvS*tYG`Py3X~GcU+COkZ}xId*FU%f;J#jwi#v zm1PG=G2FiG{Y*bBw--L0w_V}Xv8_T?Pgg&ebxsLQ0JWk9EdT%j literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/disclosure-indicator.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/disclosure-indicator.imageset/Contents.json" new file mode 100644 index 00000000..8f8af423 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/disclosure-indicator.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "disclosure-indicator@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/disclosure-indicator.imageset/disclosure-indicator@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/disclosure-indicator.imageset/disclosure-indicator@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..de4ff8341c7a14385e7fc06034ede2ceb5dacd26 GIT binary patch literal 261 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(zUG>awLl%&B^K@|xd2_*$_kaPzkqwXi7bVY{^ddPZiR0cR6;B|# z_xlZFj`cT&Ql@V#Z#ZuVZ%|M0KQOPsma!Tx@Zot2Hv_}}|CJ|R01aet0-5;sJR>KA zg1~_TU;Pt-flx<*W{{GFioAJu$8_zeMPo96=uD@39x6QZ8Hz)!%U~7M#XDs+L Qn-^r9r>mdKI;Vst0RJ>xq5uE@ literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/disco-icon.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/disco-icon.imageset/Contents.json" new file mode 100644 index 00000000..798f15a3 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/disco-icon.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "disco-icon.png" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/disco-icon.imageset/disco-icon.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/disco-icon.imageset/disco-icon.png" new file mode 100644 index 0000000000000000000000000000000000000000..7b66f5740fcb70f1db3456424ec3a0a734074cfb GIT binary patch literal 249 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(zUBdWnZZ42^@N{tud2>S%XgCMU!QcOvo6h!qq!Ym#%p&YL>uS-u zx6D9AD8S>Ba0x3!q=BD-mx1B`|7mCK?gK?^KxVzYu@ET6!LspweWnCMXVVuUokdKJ qMysF3+-8TGGeN~&0L4fKh7ZD1zU*Z?JNKY9NW#ODIXZoo<`V7YX4_w=)ey zZI@>axjYeFtf5SJ5m89sMS-80hd=(niw?^s+`*eRAs61P2~XhDOfZ-BPvu93@7{!^ z0K91F4Sp^NFPeLS{}55EU_j(|!`EF6_|ydGdJGle;p=f#fETT3@J(MBKUC~N@m&04_$!8d7z0BC^P1!)3=SDk_r*no57-B+o_(18KLdh+Mg zZx6A$~313SK2%r$$tOs$2zYq-+VmZ{f=!b|&B``>NTm`6665 zf+ql98UN+b00Uzy*eB&m06sFW(JR*xGzA*G*PQ{t3BV_Sp9(`$6-c@k8+3vd5WGca z*oH$=*z?_kzwhCe`+{pJc)4>z?O|zzaHtAxaVvL)9fAB7=?Y8zQggIzNrv|2JNxPH c(L^|V8{I1Cf5#JvBLDyZ07*qoM6N<$f^@AsfdBvi literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/dumbbell.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/dumbbell.imageset/Contents.json" new file mode 100644 index 00000000..05d7adf9 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/dumbbell.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "dumbbell@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/dumbbell.imageset/dumbbell@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/dumbbell.imageset/dumbbell@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..7fecd024fb14cc83c15a5632074dd0b89d645cba GIT binary patch literal 360 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(zy((dD(mo(v=IP=X@@A?d*8v3{mhYK={~uNVF{NsyLa1VH>m&>2 zof;|EcWN*K6*4f~uuw_$e4hKMRNS^+;@-55dG@^Pg>CEQ8COQmlHr>1wO;m#?}6uW z91aXj0u2qaED`^IYcTElZWsF?)}g$Qfn|;8hwlmuj2s)j>jO>u|G&TeDu_`Ea>3iH zdwClaL|h+QOZ^V-Ilz&#pjWM>qu%l2_j8^aTXz01^|}-?ckAZ&`^(ndlLu;g!Tq6x zf#HIrf*AivMu*qc{OxNP?#MwrdqCLX=l&jhmW;dqw{rKe8B{kuWT;HHvAhu;(YEba cb91c{2pC=9xqCSIE6^+kPgg&ebxsLQ08v|dmH+?% literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/earth.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/earth.imageset/Contents.json" new file mode 100644 index 00000000..01811044 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/earth.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "earth@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/earth.imageset/earth@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/earth.imageset/earth@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..621969c22b7439dbc97f6014f61fbf63b43e12ca GIT binary patch literal 1232 zcmV;>1TXuEP)I%q+j(+NPYnWi(u z5rL14z?U{2r04@LuvdoY+1%L`b4WReDi1U8{&!}M8UhWQ{jP#PAJzB?E z%5b4Xe0K4x7Q+hxNIej)%dVb9GOYEIAe3B2D^0j(G>q1@sbpPWq1&wKDO z$Dl&3JT|QuIt{0eP$@&djR5(|}H zo{)O7WcAdPK*#$;Q|rkuBtsO;&ZrZ%xz{3CIff#_;N5m7tuUj=Lo9VPjLL4*+pmsj zT3&)&s6?(hFsy~^*6t{{O*QCJ;EjdOmbob7k%ZrK!Nw8(Lk+ zFr)K`ursqRn5El2Qs1kMZKycF_l3Jjg6e=-du)YP`27yJC-7Oij}eoe0mq}d!Gy^6 zK;a>6-`%WqG;_@F-~IxA00030|11-gSO5S5Hc3Q5RMlB+b;B?WJP3wh2w|`=SQ#t~ z8U{6k6+#%a3~B}qgN8xEVEd!)b(!r*{%WW9{3lIp>wMBlE&zOaMvJhufp1HVvA~?p zhevE%Q`!05YVD5pX#w;!>}s$8SR4;Ec(zmoAjTAcAu#6z2U2Ij0;VDW%E7<`^RRq# zT9Ct!4~-DvS}eGd!=C_dLbm$C;p{raK}fT?wfB5)K*?o|wA31kr<%?$j<5(Z zwI|>HBv!?UH?DO=s~U_j!oBH`pJPCBQmm!XWd>!6Je+k+@ngpXC6IuT3xGCa{UKEA zGzqnU#Eu!9w-M{Q=-;egnj)&f7)uQWodNiXQ`F1}$xuSY60)~efO$1f&n;?90RXxL z*^4=SBau&2As6UMvgcdNNK4yG0T$%w1vqwzDV|&u?K1-~R)~F9`P*?nwj9|=FpIL8 zze$x(?FfZABM6c*>&XGWOo|ZI+H1+}jI>Efk(eNad_Jaq6RAp!j&|iC;PcG%c?PHUtC~NNvD*-2Q?KAca!4vas_!Jou4Wlox8o!nM2a{}-#07I`5?m}wu9-#Uo zQ#77n+^eoDU1xs)c=K#l({Fov|Hf2_4o@~k6s~zSzR;QqFJyNhrh<-7R7Jj&<35QS ukoOOe2LI3$WoAR;ObKi9oUWyJ?(gqPpY}KI8vAwt0000)H9&J}1GCN<#$p4`$p$h! z?6a8*82Gl?t0t5Ake`Ne9N_uK2X=bY?c$h3k%>p(w0AD^fLYlOxDRs(jGyqb4`dI#k+_+9pi zNZ4HL{mF2ruhV+|<5%Y&l%}U9*7$kWI`D^BE5z%*Nnd0llDGJ=TymY@*}z&JNgCQYoXr@muDN`eo|$ zO{yl(bIk_PzDrB;jIJE@b&oFVjyu44O6iKPSIiyb2drL~c;>dGKHS%#Y58us#Mukd z3=IGOue~u{6BuOYKtc3&#z9~Z@wooy=sBPvyHL4A#4VxOh)FqRO3wt|Tiv>aE4rL{ zd4JfS6l%AaIR8yEW5ac?h?fjLZNE+CO}cz?yJ`L;8ST|yD>(!57=m0KuXz-e>$Y(qUg7ZE-7BKBe1s*9PX>?_il^rYfK3&T@Bh5AbE(~|zPgcc+l)>Nby zWPA_ii0C`2bMgHTzs*d2O-vdMP_&JEM^yj=tBZI5llXka+Yup*o7XKB+`T~OdcobZ j#S^yO|1Hm=*dpNMcR+g81fRn|pD}p4`njxgN@xNA>Otq3 literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/envelope-icon.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/envelope-icon.imageset/Contents.json" new file mode 100644 index 00000000..7e1c2c00 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/envelope-icon.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "envelope-icon.png" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/envelope-icon.imageset/envelope-icon.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/envelope-icon.imageset/envelope-icon.png" new file mode 100644 index 0000000000000000000000000000000000000000..93bd15dbf52ea8f583ce13c12b67aca57bdb8da9 GIT binary patch literal 610 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(*&FH)H9&J}1GCN<#$p4`$p$h! z?6a8*82Gl?t0t5Ake`Ne9N_uK2X=bY?c$h3k%>p(w0AD^fLYlOxDRs(jGyqb4`dI#k+_+9pi zNZ4HL{mF2ruhV+|<5%Y&l%}U9*7$kWI`D^BE5z%*Nnd0llDGJ=TymY@*}z&JNgCQYoXr@muDN`eo|$ zO{yl(bIk_PzDrB;jIJE@b&oFVjyu44O6iKPSIiyb2drL~c;>dGKHS%#Y58us#Mukd z3=IGOue~u{6BuOYKtc3&#z9~Z@wooy=sBPvyHL4A#4VxOh)FqRO3wt|Tiv>aE4rL{ zd4JfS6l%AaIR8yEW5ac?h?fjLZNE+CO}cz?yJ`L;8ST|yD>(!57=m0KuXz-e>$Y(qUg7ZE-7BKBe1s*9PX>?_il^rYfK3&T@Bh5AbE(~|zPgcc+l)>Nby zWPA_ii0C`2bMgHTzs*d2O-vdMP_&JEM^yj=tBZI5llXka+Yup*o7XKB+`T~OdcobZ j#S^yO|1Hm=*dpNMcR+g81fRn|pD}p4`njxgN@xNA>Otq3 literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/facebook.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/facebook.imageset/Contents.json" new file mode 100644 index 00000000..da920f54 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/facebook.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "facebook@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/facebook.imageset/facebook@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/facebook.imageset/facebook@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..dc67e78ed33fce03ce15829150f2a3f8bde29fa3 GIT binary patch literal 350 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(zedFG=qIE!eiKmNW$eU}iye$R-ZWpx~IXzY|hY9hm5SbIe`Fep+ z1p8@k)(^&u#4c7VfdFAfn#in)3Ht*yzSj8;Bzz9JX@)sPf zyUN&Qbzl|W1ZD@B2f_@G7@DmbzPP_w&X@3u(+cR!|Nm=N_NxOKwjlSuy>O6|fq~=5 rhTHX-a}Tz2OmY(U*c8uOFAh|I9~AIhki8{S4pQXl>gTe~DWM4f%;jSi literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/feedback-icon.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/feedback-icon.imageset/Contents.json" new file mode 100644 index 00000000..e1105e1a --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/feedback-icon.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "feedback-icon@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/feedback-icon.imageset/feedback-icon@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/feedback-icon.imageset/feedback-icon@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..e70007877623fbcccef31685dea2be3a41a1a4e3 GIT binary patch literal 621 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(*&8YnLQARb8|K8KZG33qk_q;K=T2XOEOFgR#iIB+w}eZU~g za@yFi;Rgf%Nyd3VAOHVIq+hE{dX0ckB5Fnz1ypMfMZXqo$>(%iw4F8qB0KL2`uah1rd#( zrm^ll!0;=TA?nk&?>(1p-8Xmp^s1Uob8kIwXodR*hofwz2N|!tS)v`V@3H%@pz3{F z1o%!*7jW9JNBy{P^6B{(56o%&@n+vwkr1}2afL=J&wZQK?csZ;Kv7d>_S)O8L;Oxq~tq zRhw6fKH2x`J2SKAw@34AkDl9g`l#A9hoYk^tk-@?jh*y{J*c}*0vIX`p00i_>zopr E0NGdoJpcdz literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/fire.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/fire.imageset/Contents.json" new file mode 100644 index 00000000..b3312169 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/fire.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "fire@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/fire.imageset/fire@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/fire.imageset/fire@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..14201684847b9fca8e3f11ecc3000d842af58cbf GIT binary patch literal 1732 zcmaJ=Yfuwc6u#kQq*4iEv4AvdpekUVKp?9@@&JiL03m8rW@;WQ1W0yC76{lPQLtcZ zs2K+YM?nkfsN-mZs9DGu)kWdjdCX=YqYyG%$PhUlB1(A*BEgLq63Gf@ zYB*dj!soNN5s`d8cRs@7aCvMFeE3Xm1RBXlc~QvNU_ft1?OHTd8b9U>?u3j?k|aC`=7!lMInK)Q!x{sXVhR2 z9^`aIpb{gdB5|Vv$8*NBn39Q;xG57S5J?&znI~6ibOz@^$S6ZDM`Z>RsWNCVnN-Mt z8Z4boi-wChJOP&*Efz?)Ty7jsAP(n=MUhg8AX+Mk5Jiu3rMMQFe%sB z40-~3mSRR-KBkQ~;(BEC(x`6oSoo9bjd8V;#}YLumkonqJ4^eoQjZ_O{&6lR8W(OR zS|2mOemBC#uIQ2nz@Ng8j8l?n_*$|+WyHYS{*~!f8L&1gZDH;uY#{{A(n*sQ(7M3s z90;8A#w=V@_DzXmi=j2iq$0(G?f1PlBHm@)RO>xz;8|K%y|vTpHqB9=(@Fc)Bj2^z z@^i@>i~U2|wgsy!4~lENyD#?t{yy@|1`dPJ8O;U|Q9?U&QVaOI8nN@UO4>K2g@D)Y zfZu$TGJ~S(18x4|50Ja@Rl7P3fb&QhXb1ofpPCz~0hCNooo=toFF(FwcL$}!F*VlJ z9Q`WCs;vrjDdDTD5BxB@xs8?jckS%&tw2Nr1ZIiozTQ&RZcR8H_TJvcytY3F^w)RY z?Rk^j!?yPvqxBwS={H+h4bSO*V1LO|+jj*|T<7r5BE>QDmbGMky}0sz#FstCECK2x z^EG)*>V)*xsLI)Wn~x@LJ10?czNiyBG_?(wJUD5%ZhG3wDO+MJzonHnxb&rm$STX} zpSlilGDLB@;%knVSDO@fvcnyOsJvLY)w*T%9{RU86L^#qZclb{(Nap^*}YlyZAo>Z zF;+p{K?`HSX9u1HHrc~2L=M4{jErc>QY%dVdT09Ex2v|=k!fXhZovp;YQp}~C9&d< z6)rx@#ewO8U1(-t@9@)h^40skOI|$LajPX@$acEar7#Y#A9e@P?ob?Mnw5$+AJ&Kq z2kYQ?Ui8lfi5o1YngM#p(XZBwTscnE>|>ofWN#dJv5|OM7Idv~c;s-6*P7+Lx0{l!eV#q++`DWYt+sUMC##r2x0^t89AG|oJpxmmE(z(aP1- zvj?m1bx_4_M{atUGnszkBG1I&{+JyVz&Bo<6*4`_o%2nXZv}m zeXlC-tR_=VyuO`v=*%AiymRT}DhKuRihVYEZjk%A-9J)JuKUSEpC3t=ZrpTb7=-t1 RzXbmbAd5?q9u}|J@DJgDd}aUu literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/flower.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/flower.imageset/Contents.json" new file mode 100644 index 00000000..8222c1eb --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/flower.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "flower@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/flower.imageset/flower@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/flower.imageset/flower@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..91ba6273992303adc15cfb05601b104cb91b7635 GIT binary patch literal 1713 zcmaJ=Yfuwc6kfvH2NIBu@lm${Dn&`M2?-<+$zyp$O{5_TI%-*xC8Uz zo0CYwz8ItnMcuJm1 zqs?2Z73!FA3*lIs2oM-?3WIINY?DP~6EjD7MPThZW;5YY2(?zsl)4PUY06|+PMC3+ z&*DXBIS2v^1S}+yFAyLLU@iyYvN@m&B9KTCUm)T}!DEdHteJJ0A~l*YW((}Z%q)r` zMQpa!YGqk@EW)g3BSN9j#lhu907Qgky@|qX5hhFUI0K4Xv}OZI83+^XV#G3t97@at zp1!$)k({74S;oQy0>-vsBpYFITvr+gDwY2aH5w<-7D|o3_4l2`7R`DRXRC1wkz>~4 z03PfzMT+ER9HR)ch9I)XqnMmUP=qCmAYplm01i`PT7$`T@X4r#QYliHEEHza;tEvE z1RN}bK_}u#Ib0!vM9PG61VQ4tLK%-Mlk!oyFdCIdN~6bhQ9_$z#7)$=uI{Za|Gm1d zVla}xGK!lGxwtODOc>$OON$Ke@P!iQ`aJ^dL8wZvDEecq{wQeK&6_$S9H=#IR0G$VH-jBTjE{gv8dL)PZD#} zuiAZ)eNMXfaG-wrrpGM_s+P75hCk}^zwQ-4ojw94ln*6BUXsp@CmII^ikxM`bV(0< zr}T&GbT-P}*|6A-hCipg23cxDZ%<{Vb(w5|qIg&0<7sOs>&~~R(*aT5PIr}zqJ>x3M>B0 zwiQ`BJNrmYKy;@ng89hVk(vKv!8N9{VCf;0y*;mwH*~1(*_qVB$=&tMxu#N)Bk23- zyDu*Oj5)Nj-nra!aMIPr^K4z5&#K$<0miLqzwU5zgr+<0x29Opv$7G=_mq3VPi77cuG`hms*eFtb~;Z`XKF!s z%U$7pu%cx=jiFs-$t_i4SP zs^D%o?KzKLQ5e60?^*rvGI^qZbufM*x2r_y#yKXfvF{6Pd5E@O=&4TAe|oO&SXXH& z1gC^RK^-r>O7Z4{JDRHY-tL%RQr7oU>32UI3n_GO@VL?d4R0<-kk-A5*L0nG_rs=H z^8$KCj%XgA*~7XtAn8qQJkgTs9dhHm-E-?%bzyqjtC1#g|C;2YV(7Q_*Ox8%&U>CS z7JrbQyXGj=F0RgDF%GEc4xddidOM~*?%3jA+q`90aKgz`B@b?Ny|~$W?>KGp?eC6W zS^j%nl(fAPi(2&}vqkbxa}qsq|HkbHFV4wcnB-q^X{UDH;b3;slexWx^o($n_3o{iT{G%uF&e!xUoGRGoE3zvZaW>|^cnHolU{ZlBnVQ(tI%Vz H^pbx8fWvjb literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/food.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/food.imageset/Contents.json" new file mode 100644 index 00000000..9fa10cb9 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/food.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "food@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/food.imageset/food@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/food.imageset/food@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..82c36bdae86e7198089ce4e3ecd420066d637020 GIT binary patch literal 460 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(*&1l#6gk=$s=JIrL40&@ik+<1EpzUEelaLxCr-cNc8M_Y?-+_Y# zAu=MI776uUhZK~#_fDJkWzzfeT-WaiA5vftX)x2gG3|Bf$|{C@2gb>rM*Hu6_q)<9 z{Dt%Nw$OFoeu(Dw-M#Y5;r?s0tA7lCSe*@JxW#<~`?8C1yBaR@H> z#u3oYq42kB=kHgNS_}ucC1i69X5DMyW0=6aH{tWWFDhaT4L%$T&G&ZjIxro)`r*f) z=ySTWp6$?He_r)&XZddhhQ68xjrA-A))x$R3o-ntzxJK$10w^&|NlL%68C|jC;Q~<=KIXK;QdN4ys-_xU|`u^PNITK?#Gb zjI0CulIAH)vUh6F@I3B(J2h8<|9y|0!sbg#(MADqAke*j?n>bwQ;t?zi8SyX;65<_ za2i9uPm{*ywKorcH!@tgSok~Z!%g>39GDWR{d9J}z#~Dy6Zgaz>>0G0RvYc}R(h@+ z{wX&}VVi(#L%w&ur8-=v=WxP4VZP8tzJto5|5me2V+p zc7Bbu`NS_6GHb7HI+rA{+*jLLa>52{|ootm;qyo0TfejXG9A& z8wj}ew|F=>sXSO>!N57OsX2^^uZuI#s8zpD_2gjiPvDf0 zeOc0I>UCYZL*%MjN2c(Z>1)JwU-5-7I%(CvpJe%M-E`GAY&ZA?uf;gyk|bZ>1)Q+_SbOVw3f8# zRRK4%mI^&v>ipu`wo|qD>s{aN3Rs^x@8TX8j`!}tomZ)beB`_O;p;)*@rEWbHQ?YE8i$Nt(@Qp7b7gjgHI U|G1=b08=r8r>mdKI;Vst04pm?uK)l5 literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/gas-pump.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/gas-pump.imageset/Contents.json" new file mode 100644 index 00000000..26e18dba --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/gas-pump.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "gas-pump@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/gas-pump.imageset/gas-pump@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/gas-pump.imageset/gas-pump@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..0092063beb16f714f31acea994ce31c5c81dd15d GIT binary patch literal 525 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(*&FEp?bYV4+7V&g(40&@Skhj@Dpy6RWlaSUzp=Sv~ZOxGf4i*@2 z&SrkrV41*ofU&xMXh}prcL4L=fNRda&nI&F*KjHo zb3Q2g6wIPNvD)CLVX=JJe^!mgU0Exh)`*`8cjUYl#{KpAMJE0STp64U*SQmR-D4bl`}69<+FKd@6q$Nlk zCdim0_)38B+OLkSI?gN%yThW7@&z1YSdebp@==F__dwO3pS+Xo)u!|_OnvaYK=lvD zmuh~&&Mm!p?|-X!-db? r#*Y)^S8pz0IL*w!aFk(_jx8fpXT#1rv8xX+0P#Fs{an^LB{Ts5N*lo% literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/gift.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/gift.imageset/Contents.json" new file mode 100644 index 00000000..3d0961a7 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/gift.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "gift@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/gift.imageset/gift@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/gift.imageset/gift@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..c75f9d2c861eebf54e4c7652e70858977946cf9d GIT binary patch literal 634 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(*&G_WSBl`>>y}{GPG2~6e+umjao?2xCCglwWHy$iyzVYA&gWC(X zl;%y2HyO+tcoUlM^?NVnxT&Zpf9dYgN&iDQKUSYFd&IQ=x)Fo?rQ$!r+KgWq%ox@; z>ocsn!4<*~byWN3?tEyzB7{|G(+6 zFn;f7d~x9Xr`=0S9M{~eX+AG|Wy9H)SwGKdF$P}~e4W4Ws<_wX(j0)9V)vjxAu(Y58TP@Vd2uCHTEsc($N5^D%D5Tq%Q) zSMSA^UKaT6J)ea~ETN>fIXJZ_XCC*)`>U^t2kA`KnkN`;eZ{t%xkKRkgF45h=Mwmr z?t8sf@QLLe!}hJyA`Rv;2#7sc8U0x9lctTaijCym(->7Y|$U0kxAeX59SC z(X_hs?tjLM2jwqUmrG13IlJCSVt@L5)BnF7&*Si5QDJ(+@gesdqt(3WV4e_TXM>A_ z(u3ps7#SG;|F1OgiU-D}FDUNb-drfiV8FrR_$%K^lcBMLbAx@e?Z#;xdyM~_VyxgT udB2{0Mblk|ecZ5=0Mv*IdKr%GJ;cBe!BfDhhUx$S literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/glass-wine.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/glass-wine.imageset/Contents.json" new file mode 100644 index 00000000..680b74cf --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/glass-wine.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "glass-wine@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/glass-wine.imageset/glass-wine@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/glass-wine.imageset/glass-wine@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..6e65545f3f032d80aa35276cb984cd81dc683bf8 GIT binary patch literal 497 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(z{XR|m`a&SR+tbA{`T09+?gwzs+CKzyf%wSPb zVC1xr;Opw#xO>UoB}~8UcC9-wLx&-!NLRp1jUmU2VJbtwR0b)=1)7X8EDheA2RN?o zWuD>nSz0jRE1$wg5iuo)kGq&X-ZH&ojuHq)$AJ>I2sr@7|QbA zpHEO`^0>oVu5@4>!-Nh7&!;-aW-xER6gZ_&R7>Er@y4I*O(%sJja-Z$XV*Aca31)b z{Q3Qhlm8hR82IKGWF6_4&%O=Ep zn89gibn4UnGjgK;oNpwyd@ek&I>=H=F@!@tqo*Y4hfA|fAny6IX*}{p1y8^LC5>bujO919|E#>Lr81iPCW8q-~0atkzN5keW$HNMV0>&MZB2CN( zd2-k^n_C>uF4&us7Sb!K-F0pHo7p$Jw|@HfcamyzqC^`Kdhf+t;~~=+EMRM(rgY}^ z=|66P_w82Ay!2J{sciGVe=lb@#4nXtxqQ@f%jPoLUjuInfGz;k7eNBGWFba$9qq? zw_3bZ&2-2r2!HwI+ku!1KmIsfHr&nLeMZsng?3!xz5@-qujJoxrl&I6?BsrSYU^|! zi}k8k%pQDt^L0s%!{%*Hv8jR^8_XoKr}HiEDzUWA2{Ku5G9#dvz0AA5fdLe{|Nkr8 zP22$tB~wr+y`7f0vDrYNCEQ6R#7S0!eJzX10|uEbLK7OAk1={2aD3hHZ>RbC;^LFd z1%E0x-}kB8xOw)3-OLZB^BwrKwd%)3jrSQDi!Pb;{cQg9PA71w%i_mu*JS+S4?LJ* zul4?v5UXm`oI|?zH!rl7-t}Nh`_<>OrhIrN5T||Ka`D`$+saPt*F3MOZnubM{;AIs zFWT{)h`;)Or_r5a?x_#UZ_S9e42xg&cT?&Ph79gsh7yO>#dywaG}vu=&T#sdGvBM2 zc69#~J)pWViedes+gnyWQ=PYR&uW|f(z@X$mw)wmzU-3DGmx9G|L6W?j33Il>i=K- zJ!^7t*+&`fPfE*Vr6sQM%sb*BQ})DfQ~COOPL`MF-RxB7PFWSV*Jic(y{dImSs&jB n&$R!YnbM!vuGS*p#Gwcw{^;9@+s%0c3`qu0S3j3^P6*@O3I7wIozeHV9R{eyQdF|6kLi^O+W z3NAiywfg~6xVjTpOiYVdL78CG!S-$m-g%5ZTQ{i*%IMGQ+!tA;WZ_<$^+i0Aw^R1H z$ORF_$~$6C2M*Qh2sbEIYz=4VkJ3)Q@8s)b_~C3R`|`32n>&K{I~IO=^jVbgnrlse z)i3u3Q^6~J<$?=hkK8M){wA`(_sGN0`@$a>85sWmzrtI;8R$bXkk8)Ec*xtVAmFxN zP~xDVRny`U7V{0tB`ofVEbax(yBPl#tC%&qJ$$#|<=&S1u*&t56dY`o8Tb`6`2Ek@ z9WJa(%4pr8v`)&w%B8d7$x_J%YnR>%l>)W`FGa5-!Nt-$nD;Q8X;Sn$nm#M~)y_4H zk9v1FU+H?z@;-=hhf_i4a~Anaj9Jbg#{4Ko73VpE=Q*q1GR#q2*HJFMKn-Z7pTQQs z0#%pZ9k=|}m!(hVI;gl#EFt;U?c)M5j~bt;oxAkl^7l6pCQKH`wl@^#9IBqcpU3d6 z?@9Tr$y$3|GL-6L_`DyRzQ4ez+_3fXXNRu>|KyJbFE*@O3I7wIozeHV9R{eyQdF|6kLi^O+W z3NAiywfg~6xVjTpOiYVdL78CG!S-$m-g%5ZTQ{i*%IMGQ+!tA;WZ_<$^+i0Aw^R1H z$ORF_$~$6C2M*Qh2sbEIYz=4VkJ3)Q@8s)b_~C3R`|`32n>&K{I~IO=^jVbgnrlse z)i3u3Q^6~J<$?=hkK8M){wA`(_sGN0`@$a>85sWmzrtI;8R$bXkk8)Ec*xtVAmFxN zP~xDVRny`U7V{0tB`ofVEbax(yBPl#tC%&qJ$$#|<=&S1u*&t56dY`o8Tb`6`2Ek@ z9WJa(%4pr8v`)&w%B8d7$x_J%YnR>%l>)W`FGa5-!Nt-$nD;Q8X;Sn$nm#M~)y_4H zk9v1FU+H?z@;-=hhf_i4a~Anaj9Jbg#{4Ko73VpE=Q*q1GR#q2*HJFMKn-Z7pTQQs z0#%pZ9k=|}m!(hVI;gl#EFt;U?c)M5j~bt;oxAkl^7l6pCQKH`wl@^#9IBqcpU3d6 z?@9Tr$y$3|GL-6L_`DyRzQ4ez+_3fXXNRu>|KyJbFEQSeKoQrUypjbB=N#DYG+ea1ejseq zhsmOEW((f%6xz@JZ0e)wml@T{J|1Uycv>>aY~i1PKgqKsj?O-i{6FWH1n-J4j_kL) z*k;(gUX=XpO~yC3xF;Js^<^IE&nqw9{dltJstIL(PK(@%du^b=S>>7e&zHF^geOC0 zeuL*hhVZ{@gLZz}XOz(QalhQ5Cz*|=8z$yBoN!$+ZJJ6Lk!m&e(%@#BwDGk zPgly{)^C}fxOTClO?~PCSq6sx|IcsE{{ajLWl#XTosrGkVj$4s&LpJ8$mwwah!}xr zY5|`Gr^N!kcmHzq%l}wN$hB_sG2&FLO}YK{xY&WcamIXc7xf&N7DR7gn7f77OR}NR z@x!&nUpSpi1%F)GdcJWv!!O>0(cg`xg=?Ld5?`d!HNj!~wdrgs+`AlqrF?p0st|eM z7`@bK=x(s^ZK)S&oQ2CI>(?9ekOR*%?B(KbY93YTxt6` zrKgY+sAP57oZVK!K*4$Jjha(8&Sjd!8vC@tu@|IWT1H$w=c5ZFP^dVla@Lv?Z8`oI z&Wf6@J0j-)bz*pU{2ykIt)H)674P5Xc2STm|E|)b2ln*~llkr)sbksFx}dY<`_=E$ j7xbnm_Pp71Xl?ZNMc1W^j$TOurWXcJS3j3^P6N224w@f0c-#pgbjEb^!@RV3Khp89|XOVELDPD z;@COc0O6qkTmV!6IsiQY4dA^pP0u=d_d@?YC2{}_fbol?wl)%1p1RWtz|Tf>eVL{; zRBDb_0G5D`uWg|<4?l=oWXHc9#O(;jGZL(KBG%KMqTsqC>N9{AKnbAO*lb46N_uzR zkqy_-&Nmhtn#h^VG1E%olCIl?a{ejYz(A4oje@u(dwBX@yc0$|My)P{8PUax{4b?x zY?LuF;gLwxxsKB$mJb)TH#wg|N2UZl65UVe z{O2KXnsAp8ER5Q7f>+VBrs=nDNcnTaRbT^HGk-2EOQp|d#Fn2ck@cSFPX@uwS!xYo8cR0~(^Kf@K^v~B!Ue-{-`RRkqfL~%pU9Jov&BLB<{NwtSDvJDh{U;HiC z6ulho|GJBu$?5>DunYf|4!kGrR;C={HC>VWq*6=Yl`2vxsR!=|7A`T+g_00960 zDxYnZ0006;Nkl)1B zfU6Sk*@;h#8wFoPd?^!ahL{B}1?u?%mZ;G|=|k$V0RWsMR5oV72@Tc~?UZXvRQjxK zM5F+M21P1D!!CLNivCs?gnMCS}Iw9NH$08?#yX+~!BWiwrRkEV^Nef+!@Bo1f?rB`AM~1g0r10slF`_O=33td zH5B=)e@3jq_Li{3UH+sw@BAt>TIlUs;;6&gx*e|8KIo2QbV#!z#hhx08YW z0JFdvhA)a;q754v4s$uoe{ziDz!rv+Tn8l10`Y0C112U>Yq(f1WNg$FaaeqGT>wL? zn11WwYBAku^;|plh~+c>xLFe)*X^73c%El>?6Y(GBez(vJFxKPEj+rYyyMiN+UdPp zBA6rGnG$xr6pP9^Ec$wyVw!vHSx;RtWsR-3C(b+Wsq1I?Ns6;!C-1e4jc@O2JY{_N zGfd7Y<-BT}i{CMa8QfSkZPqN9V*hQTYeBCa-+B{upI2%jr~iKaz1hq-X3F;h|bziL}0!8svpnTqeHzFL^H zG34JI$yq0&*$p(mFGBDZ_@;#D@Uhy?f3H-}R^&YO$)As_o~%5+!tLJ;9)0(DT}PLO zXYEt^c}IFapVYyu3IF#Wi22QZ-v97coqDZHW~%jCV!OrI4Yq34%XH74QZLmVdz$&f f+Eezvt?@O5O8*$R-^Z*2rbY%&S3j3^P6#+;Ofsg<$;ifqG}HN!j`uRFBM)U zyi_Q8P_jXF0^cOQJ@(B{whFN_)pc^lFXi0l6IvViJt%+lp%W zXK>^QZ%}_Hv0=7E<9n6|Vn5OsyGT@C7y9OUY)@3~gtz`R5eMzpq(pZnmAjhf#|VE2komLL%<(CwL{W~5*C)XT-i1tMv%WL+3zaon z-d%3TrM>CT-{g$a)A1|f9>4j|$iVRbKX0YF1uzgFfCBC9%tXOv10FYfP7jAeDhiC8 zQyW-RLY!2AERPv27B~KF*?#xkG2Wku7{V*_lZnS{i&Va z%6Oz@zDt0%(uoX$S~Q~tr=!1lX|t%|?;LuXlhtITsd e860>xfef z@8y%Hoqk%h^G^KjGix*+7sdo0`|jrORO6$q;0op(-iA$C4PrIkET3+PIhi@(HReJYD@%)Pnh(U07gQ;(-}$R69TR3i1?;f2M&HiKF64WUojVc}rM{NuJg a&_p=!cy*0+k*V%ckbtMFpUXO@geCy5n}jg{ literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/howto-icon.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/howto-icon.imageset/Contents.json" new file mode 100644 index 00000000..fbbfe656 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/howto-icon.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "howto-icon.png" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/howto-icon.imageset/howto-icon.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/howto-icon.imageset/howto-icon.png" new file mode 100644 index 0000000000000000000000000000000000000000..d89097c606fb4acde152d201bbfe608f427da38b GIT binary patch literal 1314 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-eX{3R>=&B zD2ed(u}aR*)k{ptPfFFR$SnZMGcefLR}>^BXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8 zz_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3diNuokUZcbjYRfVk**jy_h8zii+ zqySb@l5MNx2(nNi!Z$#{Ilm}X!Bo#!H`&0@P{GVh&(Orw%*;?n!N|bSNZ$a6%ybP+ ztW3?UjLa3FKnZADQA(Oskc%7CE+EfVDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMpj zP=#)BWnM{Qg>GK4GRy>*)Z*l#%z~24{5%DaiHS-1r6smXK$k+ikXryZHm?{OOuzus zuShJ=H`Fr#c?qV_*B8Ii++4Wo;*y|LgnO|XTpUtakg6Y)TAW{6l$;7wt_-rOz{DMziF&!8;i7AzZCsS>Jiexff{6l~=6A*)d0uXCJX%PF)&EMO$1L+l>E{-8@W*G7{ z8wjvG7i{UDDBgJFvyzjYkO!AXdXO#p-L1?J!o z_A7;FO+-Ji9O`QO(Hr^M`&iATB*PZ(J9jq(G6zI)Ex4CxxAN>2ZuQIYyO>?8y%~Mj zyUyKXuBiOa`feIiK|RN`d+Qy)^DjIiDq;N0{q(c?*$de}Fy1@Bn_*+(?8KqiQfwmP z>Kw@H>Ra9%4|MAP|6#AKU%=e_c7`=yvjY$7a{)#1Xg?Q~K5^A2N)8%8S0`(^{0KQw zr<}WWjcRn%miz=i#vbeNlSYqEUeoGlcGdQ0e!(yD*G2w-^)JziDk+B_^B;(2l!@fL z>CqN4$jPYNkRLmV`R)8?(dWX;c$e7@bLiB9(}UA}V$oP(dVnLK008l2Fo`NHHQVa0tl&0h1XfBScFjsG!zT z5sx%YnGd*7Ye8KnHe z-fos1000z8w7)zEfJk1y9#1Cb_VPe!FwrlyHrolr^N=q74giqdb*fN2RIyB?LG*OB z7Kw!ECOt~L2Y@BMCRDA7gK;Plj@B8(w5MkpXpl}Trmf;BmB2?nci1XCf%`q5Jiia~J17=xgYWCb7cP^dLJgLT34Jwu@o$qhzaZP37S zshCD+&~-Ykh#SCXOISh{TO#GMSTc@4$_bE2gaR2yDC6;Xf>Ev%(QMGe27HvO{m5mH z%e9(8j}nokFs4g@wE-BShu&{mq#HLELBP0rBV6tHxiH7&GKgdt*3$l~)T2v;f2_kX z;}VlG>%#`Z?-*h1?52d@h>yYrmxbahkSIJ+jlsYN|H}31XreZ1?Z)^^@Dc(vM<-pb zB6V+hdC_6r10=A_!EOy~i1DGP3<Yh9!?yt@ySD@C{+i;$bR4f&a4?%i;|elUTXR_uPysV6d(jDj6lVCNpYjG`dY@fWKv>?@wpnAKE1 ztydPHe0{p(CFR+Z9aT>IrqhL2U#30J37OV4bJ^DUn^Du9Qo3_~n)UxXJWRWeEF(&u zWG(r_yawgDAgAW!u-q!$x^(*Bgzsx*I-AuHbQL z3#(H8Rb^dWP&?zvb>F)~^(Rga6qAzHc3+JwJFwiGcpj_;YZp>`Tp~&Z=1Gk~@qom9 z;y%y~*q;Zv0NrUKI^@M)F|$zcK5-D3lClj&XFr!S_JHxb$wR` z{bSKix8ka!IWy83DYsk~gxo;)UtzXg8B}rCQ47E0x+NS2V)Eg1EBc^5llIG)kC kedgOtdRtcC?2E^ELZ4NefhLPr8Bq{GE>lW>_K(=|4@sl9y8r+H literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/key.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/key.imageset/Contents.json" new file mode 100644 index 00000000..a9561227 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/key.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "key@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/key.imageset/key@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/key.imageset/key@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..4b594a2d6a2efbadfd8ce17c6cbc047339ab9679 GIT binary patch literal 602 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(*&6xMJKQs(TTY0)ThP;Wm&D(6ivq#X%$^8U}Y-8Y!hCBx87T$!( z8yN30m@Tk(T&0nJvoE-6QhkHVuEYJ_40{b2j2J{2*b`>7e132A|E>Q6J_Ys*=LGI` zU0c8RxW^y11M?L2id=gy$tuJktN7E{tK* literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/lamp.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/lamp.imageset/Contents.json" new file mode 100644 index 00000000..0f88f377 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/lamp.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "lamp@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/lamp.imageset/lamp@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/lamp.imageset/lamp@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..844c4302f717db80b89458fb27a2fb467b38fe1d GIT binary patch literal 646 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(*&1fhWEolto|Mhfn40$utQLx!Sz;%C%M+b|F!a|_}2EHst_9Kj? z415zDWE+~lIO+MM-(uYL`{ksW^-O&4^Eb_oW!O2DQG;;{0~%7%m2n?87&a@QwGJ(%@HvgqKu7yE(!|NlS7P|ye%AUvRecsm0a5Dq-9^MRqj z$o^n~#{tK}02vW>S0=tL<_Q7pM;Z6NX-r&@%C&nl=bo7|#V6+9{iCvhU)8{(kFB4h z;oe3D&Uq6pb@m+!mU3rm*~c}(LSx^7;+%a=_r6H4-*}VTi$x$pM8Sz;YwM$U4ki0Z zU(X6g2`IQqRPS=^clb7kldEOZ@kv)aKm5xVkrrF(R`v1mvKi~&aL=u@6g=hWws7AK z=g&7L%+3->V7PZccE_KJcN;sUFU*P&Wy3nO3YJ6i(O#2m+gKzpD8Rza*h^`cWVJc?7ZU4@h c32*-Tz5T%KJ9%*pFn}05UHx3vIVCg!0MEezIRF3v literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/life-pulse-icon.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/life-pulse-icon.imageset/Contents.json" new file mode 100644 index 00000000..13ff31ae --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/life-pulse-icon.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "life-pulse-icon.png" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/life-pulse-icon.imageset/life-pulse-icon.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/life-pulse-icon.imageset/life-pulse-icon.png" new file mode 100644 index 0000000000000000000000000000000000000000..d5679ad55c61658a54084d04330e499698fe0d6a GIT binary patch literal 755 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(*&1jGrqq!8w|KsW681iPiqu^l$5tnc$RTrk92?3l_8(36aoKzny zD0PqxVE@8o?8A16=OIJnzcX@0DgQrIFg`mo(|Gw^9mOrmjCW>o2QbV#!z#hhx08YW z0JFdvhA)a;q754v4s$uoe{ziDz!rv+Tn8l10`Y0C112U>Yq(f1WNg$FaaeqGT>wL? zn11WwYBAku^;|plh~+c>xLFe)*X^73c%El>?6Y(GBez(vJFxKPEj+rYyyMiN+UdPp zBA6rGnG$xr6pP9^Ec$wyVw!vHSx;RtWsR-3C(b+Wsq1I?Ns6;!C-1e4jc@O2JY{_N zGfd7Y<-BT}i{CMa8QfSkZPqN9V*hQTYeBCa-+B{upI2%jr~iKaz1hq-X3F;h|bziL}0!8svpnTqeHzFL^H zG34JI$yq0&*$p(mFGBDZ_@;#D@Uhy?f3H-}R^&YO$)As_o~%5+!tLJ;9)0(DT}PLO zXYEt^c}IFapVYyu3IF#Wi22QZ-v97coqDZHW~%jCV!OrI4Yq34%XH74QZLmVdz$&f f+Eezvt?@O5O8*$R-^Z*2rbY%&S3j3^P6T}&KR6u$dY1zP%pwP>Tw&44ZqurssEF3yyN{TYzeE+w#u#0QsQ_I8=j`RVK+ z3nVzume5$MqBczo4^1UCrV_NJK2RaGrU_aBA4t%oNE2g=6*Wp~l?S{-S*nS6bMM@9 z?ws?TbME}LfdcJVqwikH0!#` zl4M(3o3qXBRI~(1GYn&5xLn29qBz+u>wKzMPUfW%IFuALQPo97h9)B4q_pZj0%v-^ z1W8?om6L1NgfEOt@hV9>DYK-sVI=bZrjoR7oz&~lgM9xJI2mnM5m|?lN~!D2CBFa6L8UVr8`Jf1p_n{V!TyUfOZAazMLYoN=VkzzVQdXl^gn+WRO%GnM0cR zGKyDeiUe1SX2p$j32unD<{RHQm(Yg3Bu<7jTlx*` zU7d3Y`+WBoImTY$-dAr8&cw)%kH357!0FqCOVU8b#Y~~8wR1E0;png9OD*pJ{t|$9 zKU==_`NUyuk(tGx5MOMbxAB)vs%nzQQ zEdS)k_wmmKtgH-94 B#{B>Q literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/man.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/man.imageset/Contents.json" new file mode 100644 index 00000000..06b8e477 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/man.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "man@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/man.imageset/man@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/man.imageset/man@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..6112d16fe8d44438f2712fb9eab0e1c8074128dc GIT binary patch literal 440 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(z{XFAC{A3`#+0(@_>;SZAs;qlg1zE_a33nVUa>EGR1I7iD1h|No6g z+JB()J3!8Vd*vYK0R^7chdq}9jVCFmw&Vop&vRMnsy*=^f6>GRPn0!`=I>s0@8|8R zUG_c<3=f_&>=Qho#I&TBK~w2KXzsyqhPZo^R&cD0x){n3_Kwf`&x_|bejjoB%>uLl sD^MufV>re4i>!Dq&obfK<4O^lu@|=6NU|+FVdQ&MBb@0KHwBM*si- literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/marker.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/marker.imageset/Contents.json" new file mode 100644 index 00000000..c867a302 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/marker.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "marker@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/marker.imageset/marker@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/marker.imageset/marker@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..07124e09153254307e1607c4ac784b258ac8fcb2 GIT binary patch literal 623 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?EkiKVR20SbmnhiLb1vFAOI7v459#q)E z6UNpWz@gjxM*Zrt+BK(MnOGj5#@8@EN1N+FINt%@0~`n1Z5T@!^j0i5w=i=5L`#Rc zCQ3UlEa*SMvfyIN1vjRe=ZPHeOU|rTYTb~Qa%6(rk2yWB1Xtv_Wwn^{Dm%?)$k6&4 z_s7Y@R5#qMMMT0_+li}Zny91H;&itOM2x zR9ghP5``3>-FIXCVkShCHk|z-C4LN`QxK_0e95{ey8^fdhKGk%8g=f6p5=mw_r~fNXwy{VZ>T0#Dn+d=|F?WyymRcQfWK66ZT6(IdF< z)$JwXe7v=X)|c2$i~ZL3>@!d|I=G_>6nP+@Fik|2*D_h|H|qf%O_?jaQw8oYA8~s7 zgS{bOg)PGYu^)C0S~5*9c^Seu6Ys<{Cog@rmi54sAA%-Ze>KiL{LGhE*}{3l}G-Q)1V8z$IfS!Tx}AN1)gN$&NJ&D)|g{ z)er0xR`wqkXPN&>@sT`(o&GGrSDhSFuVu}MVy&}NkrLb`$-%cHli4Gk=?CM=S9%59 zn>K6_x*G1ZP2d2pZc3JP&8f*H4H>Eq>mSNrTa}W2a0}PLDE#Tu(SjT(o0K?v;`x|~(3gojWJTp0G#&lu{gUK{T zK55%~yt7lkPmE&E&|y9zZ5PMl@YTOT9O(c5|37A&&H)C96eu9x&bZ6lWFXRdoog1VM>|yeZ6g9n3dKAK=JQkUqfnb*XQMqFd{|dCP21)-LqF|M1^dhUr=i$BHuq zRtp;}NNruu`hd4VSa}bV0jFeuq0|R~Ci9*Ty$XM3WZm7p!}#FzrqcI|{3PqrqRN&$ z%)GRpli}SW4%_GYj1Nm+OsQvU;otU0gdwl-Aa8?RXu+i)D*iQEcxU9 z%6MiAW(%E18T)s>@MtXetYuA5X#cHtYHju_8N-^**VoxC=aOH|*}LA)-sQrFJ$Y59 z?k$mc*uIwc{dK{UAwrJxwo7hu{Ib6O74IdtFFyWJ@7;dr@SgoOZT~gpZ${3yH!c%c r$(8Mq9lSkWa{1#&Z?YP-Q&Lk?IbX5f5v=86JDWO;@D>KO$L3U$j|y=8w@ znK4K=@H$-JI`q2KgMmn_A8D10mp*)z#p5wGVtwW zT)`~zZ`Dbr1QC7i0~5QZvusco)8||e!hGP{x^Tt`r*;QtF|6EsTIb)g7qQR8K6Kqn zwPW#ieQ#vCBlxS{<2H-P_ffMtvNKfndN&1}to+`4{-NT5J~ literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/next-calendar-month.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/next-calendar-month.imageset/Contents.json" new file mode 100644 index 00000000..9fcc5195 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/next-calendar-month.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "next-calendar-month@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/next-calendar-month.imageset/next-calendar-month@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/next-calendar-month.imageset/next-calendar-month@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..de4ff8341c7a14385e7fc06034ede2ceb5dacd26 GIT binary patch literal 261 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(zUG>awLl%&B^K@|xd2_*$_kaPzkqwXi7bVY{^ddPZiR0cR6;B|# z_xlZFj`cT&Ql@V#Z#ZuVZ%|M0KQOPsma!Tx@Zot2Hv_}}|CJ|R01aet0-5;sJR>KA zg1~_TU;Pt-flx<*W{{GFioAJu$8_zeMPo96=uD@39x6QZ8Hz)!%U~7M#XDs+L Qn-^r9r>mdKI;Vst0RJ>xq5uE@ literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/options-icon.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/options-icon.imageset/Contents.json" new file mode 100644 index 00000000..71f4a6d5 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/options-icon.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "options-icon.png" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/options-icon.imageset/options-icon.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/options-icon.imageset/options-icon.png" new file mode 100644 index 0000000000000000000000000000000000000000..90000732e5147614810a221d6646751b1f993391 GIT binary patch literal 626 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(*&8W$1-k1vHfAw^640$ufQLx!Sz;(We$`Qwj0qm|!d{OKVIAjzQ zEgYEkwn%z;Pj)!*a{tV|DGHUlXY+C>wg@;ui6iFb3mB~qFm3KWxYo4c9i?!YEL#;7EV#0 z?Eg0TU+nLfP0Y)i9|t`7CaGtU^H=T2quDEK2-~gD^Qr69QmUNqFT270 z?ajyg{@qB^Xz0~wur)eto&5Hzrm>2=a=u@g-7__b2D4!7YKs?G)Qt zwiFh#1=D4smIxg8^IiSRGiHK;e*8&xh8qkrUe}pZNIPqA>48wri;j90yO#N|-^Kz#9j*|SxQwrG={vUYs z-DLN)=$c=%yWX#^`Q>)v}vTOtg7bhcq!+2r32ObiU3u6{1-oD!MB&jb0Ax`Y}vA9%a$#U8K3|TzzL|tn;x&_{Z;(2t-7$h>Z-YCJ?;osUU3<9zt#uJ53DA z7tl6hTNuq=uV)0~3&cj84YdXdF0j{Q6L5Z!K?ht0TEeXfUaJLu27oyEMvVk5@U3R| z4Z*Pz>PE(_(hf!ue3yixBZEZ%_;WzweC==@dq|atu7_lQOcgZ1ap-_!V!GZ;m|a7A zf}J~&m)3Pn0@_Q}Pj_~#t>WCFf_0RRC1|0W{i8~^|T zK}keGRPC4HZGqIscflZDy6o?&(pT^fi2 z0zB%GS`CY~9W`#~xHdt=dZL5?%bZ}`AYf#!?G69~x8aR&))sP-bWj0PP7)6I3Z$PK zJm+h0+aTb^Sl2L5_FzorRy6MzpZwTj$GuhzLRY57?NSXA-(3gbjYjKCN9SC@NIsV} z(8IG&Vgk^YF1ucM7O(zXN${>vKnG#GqUP^tfT6@11b8$;iv){?XpqoUK$hT-EFfc# zE+Eed4`BfV6e6`65){)3>y4eScdGpnyLk!FiC{ zwjE{kduH%{Kn6;9%@F?P*gh#!UonFRfXf%Q(RDvDhMxhnl&OEM8D7^6FKdQRJ@4-y zI=FaKhNSQSaApE8y-`Qn?Q@L0VFP~h97PTf&*PM5>%r1`wju?5s;x-OiT>UN*#t zX|}6W2&ce%Tsdj6fgsC;%C5y51b|dt-=V1r4d;yi=oyynC~4r{h3>_Wp&m0m}B3kU6%fC$G}iv;ZSI!!OZZk zcGKg7HVhB$sfWE<%_p|^>TKQGMOi1Bnit(vp8r2|e%yuYwy$@5X9U`V4V+`r=oK)0 t6M1~Ee-?}C;d!OozId)upF82=UP+GN-*>94^<+WXJYD@<);T3K0RVvywFdwI literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/plus.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/plus.imageset/Contents.json" new file mode 100644 index 00000000..45fa1d76 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/plus.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "plus@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/plus.imageset/plus@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/plus.imageset/plus@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..39c8679e5f2ac443288ecfd61dd7b29c22614ba6 GIT binary patch literal 253 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(zUH1ORA4eeV12r?;dci$=at=ZwHje z0Da6)ej*9h>|tbJ`2WAh!9)`%Y6mjy?S+H9K+~8Ezr{yQ|B$S4@~`LQlvB(IO$$UH dRK4dz5`aquux!w5QeXw~Jzf1=);T3K0RY`0G#>x} literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/previous-calendar-month.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/previous-calendar-month.imageset/Contents.json" new file mode 100644 index 00000000..fbee9260 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/previous-calendar-month.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "previous-calendar-month@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/previous-calendar-month.imageset/previous-calendar-month@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/previous-calendar-month.imageset/previous-calendar-month@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..aa3ed413b16f5b3497bf565375d5781c51a54e66 GIT binary patch literal 1113 zcmaJ=PfXKL7%yN55C~_9AuokQjBZ^wR#;tyZQZ1ag$YaC$xzzIR-t{ReYk=_rx&9a z5;*9^XgqN6U_y*B#)FfbnBTc&dR5F6&Zd- zLle;N8W#CZQPBa{Qq(Dk!350dra*sw@{|U;CeUZXazM5cFs~2I+i+}tIHS%_sS%AH zI02$APY4W%72q1vro+1eUE<}5?}Zr}lpuIYpkrP^kd@OQfourE{*X@%uq@y>KieDT zIQAF_2G}4IAP?tbd-*WO2m3&I(4?BJP4c5+s$7e#1Uiqg#WPHyQ1BN*eq`quHWG<= z9KoQEAbif8i51spI$ae85jv`^TUbXX@EDZ|G>ZkAbh^6*!>ZDnPWhO~fibRPF|0q} zZK(p3<^Mwsql$L$DBSCJUt%XSXF+BZI%w8bA%S;!r7S*SLj@x{gV1#46w`Txk&{Oj zNQ`lyM^;qb^a4jp8M4evrh^qzg_0=Hgu}1v8qXy{F;VP`hygalvdK`4732L}iVG%V z;Z%qXS8_$9&Kl6fm0WEvH&!#(6N6!q$|AJ&^H59K$N;5H^Lp)G`fBo(bG6#N^w-Q~ zNHdIgwSQf8B}DY&xmDqkMOFIHBzm`rupc&lUm!olL7dFuF*Jz_iVdk<{Yr+CBX^@{ zb2BeslzXikO}U8rbcbpESzK=3I6Qv4xKO{nk8^I>D=IC$lpGfC$H%Yy E0b0;vrT_o{ literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/reminders-icon.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/reminders-icon.imageset/Contents.json" new file mode 100644 index 00000000..41efc811 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/reminders-icon.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "reminders-icon.png" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/reminders-icon.imageset/reminders-icon.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/reminders-icon.imageset/reminders-icon.png" new file mode 100644 index 0000000000000000000000000000000000000000..e3a74dc2a8ec9c40d124e2fe1d1759bfb6155b98 GIT binary patch literal 829 zcmV-D1H$}?P)flL#HZHu2t{xHKB_kVr9TA># zZWtpA@L|Q#lvNO5nZ{eM6pAi!P!uq*&-Yh{;{M>JD1hP|aEbyvg8=^*pc~bOs3H)c zIvlkG0=iOr0E)qACJ?ZcG6B+^1BOVzGsmkh+PR=1=>F8U0yF%no8vbC00960$QK^` z0005NNkl=jG!BS^;^5T*H~s zJS{COh8;yZMLb9uV$7;@4zyd*>3h9W0Y}5aE^msR!3Z5G*OhW}M|feQrf_sv z>a_S6u^Y=>U2?2~`$-+hUBx^p-id>=Jy&AX0S6Ob16b{gw2k)`fu}W_X;XaDY?8fA zYmzx^ne4cvwMuRM=pa^*7uXnD=FV>tHkMdo<46p>L4E80-pGCdqdk3(00000NkvXX Hu0mjfbq`v< literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/remove.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/remove.imageset/Contents.json" new file mode 100644 index 00000000..2cc1b917 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/remove.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "remove@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/remove.imageset/remove@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/remove.imageset/remove@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..07f26128494dd0a0cb74958780e9383d559fab15 GIT binary patch literal 632 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(*&8RiS?!tW_|C^_aW5}BsfxL$ecwG3M6hsawupE-e;Su9V++Y|n za|;jGLIJLYzcZI=cKtHE9qsqo^WW;2``xdj7;{7z?l9^wgeB@kuVYZ+r(bvlEA*0x-oqFx?`Qz!3p7L`u5clxZg|Ms;{oh8f$ zl6;n#J`8$c-M*)fWh;b;tE+u}FAy??rrpQT zI&)6RV8inQNe`7v{?(M^hU-p zOsZr%FtebvqKILJPWFeH-tOEERhs+^y;d@u4JM2p7xrvn@KRwYVwfP)7A4)oGQpN% z6|=)v29KuM;oJ)%uRrjAt1ZO9)=>1TzrH1kp}UlK+No^D8QTviH*lP0S-{4oz|A1V zP{`QD>cGV_Az_N#hsV}DlNr`D+SP5f`J0}`V4mLbZ-(QY|K-ak_FV>s41=eupUXO@ GgeCyu_}^9l literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/restore-icon.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/restore-icon.imageset/Contents.json" new file mode 100644 index 00000000..331fa2aa --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/restore-icon.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "restore-icon.png" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/restore-icon.imageset/restore-icon.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/restore-icon.imageset/restore-icon.png" new file mode 100644 index 0000000000000000000000000000000000000000..afa655c95a376f0312a8bc990a59f3acf78e4af0 GIT binary patch literal 841 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 BTwDME literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/see-icon.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/see-icon.imageset/Contents.json" new file mode 100644 index 00000000..4218e86c --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/see-icon.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "see-icon.png" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/see-icon.imageset/see-icon.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/see-icon.imageset/see-icon.png" new file mode 100644 index 0000000000000000000000000000000000000000..3ad26b854b3365558b45dc15fab7a80ced2e1cec GIT binary patch literal 1711 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 literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/ship.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/ship.imageset/Contents.json" new file mode 100644 index 00000000..b2814138 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/ship.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "ship@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/ship.imageset/ship@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/ship.imageset/ship@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..5507adf15c274eadc268c1277a00508066c6f641 GIT binary patch literal 832 zcmV-G1Hb%agDp@XKIi?$MoC7GPB5P z5HK=t&qN3?nfK1B0KK4gywDKW=xb1dg`ohSq%fuR-uo>Y1V}3J%#^@tlz^)MF)4J3 zYp5!L6&`*RNMI<7iYkG$3R{5$R-pt^_KiRSLnIbef`xhb7QjzngkHAK8YYRiniaqR zxF(FaSE8({D1p!XBl6wLb~D^r|94v>WDh|v!nRLcSS-!C2t5yOH=0EOQq!D^{qs;! z0>6owglR5$9+R*iVVOp-RNP7zz#5UICB9UC^Qr0~Zd%TQ)aI&aH7^Zna~1v7_Uv%f z)L*|a_!S9%qYYn3z#tuY&y3)x{0{&C|Nk&$)3N{n0X<1XK~(KnTM>jX3|tA7fCL#-GvVsOh$9cOU85 z{WVkJz%K&wz2Y}DpWO2q;|6tCO~u8-FA9lqq4Dqk^94m6vhm zKRzIa4`9uYmB??O4(8q;h>4RBaYln4qi5QReq&IuL^Ln)fU#(*c zF3aM?iJA>jQKx2zuZbICeFn41P;eUO7%;%hFm;N6fLk*5<-Ys>zwiG4-~aWy zjTZA86S*l|2!f(?C0e5ef+J>MKeis6CmQGK3xU*xH-`=02l1615EPk?TWyTZ^d@2_ z2_fnri!q^}pul$s%AMnsaPTviNPZmNV1U}IU-fSBa08B(T?Rvp}t@w7C5Q-PKKcn zk;v!s34JmlNtcKuDwQgXA(aY%g}_tlW>CMt?U_D`pvOFR8mAbXbi-jpw3zfVYCg#H zMF|8o2J7~WvETcmqN6dCA!#c~x<+O2B}Uf)8|Me25DF-6v-v_AJ;cb27&^S z^%#w>!W;!ONx;KJBl!5ap!fE`{i*cl@d z=&TOmy}nyO9yIFnt^M27^Uqt7KG^wg^ygU_4XbV(frWAA?%kcX3w4hl#XotRmZemw z+D-XYX5z-G)~j)Qi^}JH%H3O$(SA0O({=0n_H;#Qm!^5*o$5QieSJOJ8clF&t9(=R zERC)%{u%UI!p%R@K8fCqq*86Hj*1CIU5V;Y>dJk4SSQyeZ)&?5n3u*r?#-^b>x*3T zoa=hBHnHE!%e~vd>HRwESw$Lht~~U1(09rlwVo3kxE?{pe}#;61sFc_DuAeSPpriX>r#tp}|cLh|39sDMKl($3f72Jp<)i13OHueLQRB?YbXw zEk^^5&|qXT^=0#-&8j5_GA#8;L+te6epalLb%>kDZFq2-ifguUpLGuo3_2@rbS77@ z4sZQ)%Jw$i4)(PVyM2LoYVyii-eqhXJ5ON8xBvK-iIr*S+OJ8zc>ZFH&|TUX;x?CsS83`>b0xIXqLTE_4bT zYKe(_I4#e#=U&vz+6CfEkKWS`f#E%W9+#?I4V0en)P8GIbI*yBFa18JdxkP5PG}aY z^A~hR55x*vT8hfpCqI5|7wq5A-I?Ct?eF0+#;VCx>uO{2;v45b)cV&=a_*EpU@g_O zH+*}gXlJFOV;f81@uB6epkk7u#a@#F)f{a+0ab_A#Rf9#kA7AXx#jT8V~vUlGyI#I z*KFJcxqiNKs5Wxz;hB$545egDg_8ON_i5VFRK17nRfK+eJ;bv;jiM-9Q}wi9&*I=$ ztIrysh)Dq`3Wiu5&A-$qvcR>%gZ=fdE}1<4NbUKh^_+N_F@E*w-d74ziDFPMWHgxd Jb=qYc{svjMN^t-H literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/snowflake.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/snowflake.imageset/Contents.json" new file mode 100644 index 00000000..77376181 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/snowflake.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "snowflake@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/snowflake.imageset/snowflake@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/snowflake.imageset/snowflake@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..f0ae89e56fa42fc534fe76e3c0939d88f59df1da GIT binary patch literal 1102 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 literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/sport.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/sport.imageset/Contents.json" new file mode 100644 index 00000000..83a3b631 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/sport.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "sport@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/sport.imageset/sport@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/sport.imageset/sport@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..c803a7c4e90a82a39d267c57a093a466bd590dfc GIT binary patch literal 2451 zcmaJ>eLRzEAHRk2l9NdYhuc(#vdu7Tnb!?_GKYC-a#XX;EcRj>o45EZREXZZ)hVJ< zIyO(C!kDi@$_7u`?`O>>$<&3M5b<>8+kR%b|B2J4pcmn(Nr%R1uXNgroB~NE(9| z%S1{zeCRs>cz8+pG{KqI6W&$Vg_bM)TqdYsC<%>^LL(j3DJ=oXgD{Fg%sdL{XSR zUb2ABgy6PnSA3kGfJqba1mQeh;!+hu;&~#TFrLQ;{lZ*9J2H*V=BhXBKUt8;I1*PV zqH*a=5&;i~IFM{M1Lux$!MJ1nvA)g(G#X8Gf+WV>&DY(>-G}H*baGs>CGhCU941$^ zWXt&5*5|9X>So~ZAZL8Hf7I%i#)TGNTA#^<`dt7ucFpSBPoPV&Rz#$V!gz5aF-^b({_0;6hsJ`=hQ>%u zy212-K$dL6_u-IS22J$>Sg&O+PwmK&H_Kl7@(m_JVO6jqY1RJ?n~x@jP~R4e|D^onBsLwmrnb^}KbV zo_auF6W*g=fY&nZcoLX|Haodxd+iW=w0X87sQ0;GyuUknHt~^O72{smJ*{64O;m$j z-*W7;UyPT9YW;>0wjowqU(1z;YBeC{eWG6hy{{{YFz=zlEgXCA$jG7qSoX8rdPv8e zus8f+VY{v(Nm)zQ?-Ke}o{Dxe7`u8Z;c1h1;ohHfPDNi1Cwc`8H9`eD8K5Z1y}Y*PANVEJqC1qc==t^m-KuHvV(R@9E%qOS&5zB3B{nqH*Ya9Z!mVu0lgv6{F~<6E|UUF$zYG%E(J5bI{Wt|IeYfLZbvNUXlviKHns9? zY(4Y)+Pvw)^sy#o>+X#uDGik>rB}0w-nmYgaM1t&RH}nRh0wKIwp)Fjrpr4E?s^;d zI=eX^XSj7P!?={b`oZzJYh}5)CkCFi&MA(25Mh=8aKK1GK5|QbpwFeg zrZ29*Zrv96_=k%eanexNikq{tz=aNnek}I&Y|&(lo&M3;3TyVAC=2wrML`a294xC( z+GzVeJk+=+xvik4c8@S+Vmz7rIKl)h8X7c&-%-`ithnqSykf}H#&Q|m!!(y+A2+qJ z=Ee&DBlCrSiYp?W5Mh0fDZ@i3BLz13jHeTxryCZUh;TT|Mr)+%6eKyhtnxGpd1*7=L+ z|8#gJs=&nbwyqlh?!*mVkXqO7iawi}IC3?QW@Ws!=k0sN#&NtnHFFeiuvxdR?q&gp znU?AHY-q=Q{OK}wy|>qjyIYO~7aJ)!E`^I0iS_y|^+(TC0s!XsdP5)^=8N{VyWy$Q zfxFu2z+&Vd=flFnWc%8$$g;45*^!3$5JoYmGqX5U@Y`u^o7V*%n!7N`t#@b5CR;ot z{{PN@qw1iQ@74QLb?VJ>m&M^}>2Ml3P1Ed2zqV;rH>KM)N0L&xa6!Xtl0&fwc@y^! zl9KX%l2`HWwTET~>WY24Mm>17lI2}Pvpi^S1!U7pcaL5)18M?~#`Z&s?CNXhWK;TgEC8F8^itV3*8^ag)rlotW`j`qpMPIoeb7T{ b*j%CtjZrRNe*IM{^rHtz#9)HVcc=6}k*MeN literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/star-icon.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/star-icon.imageset/Contents.json" new file mode 100644 index 00000000..a2231bef --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/star-icon.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "star-icon.png" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/start.imageset/star@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/star-icon.imageset/star-icon.png" similarity index 100% rename from "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/start.imageset/star@2x.png" rename to "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/star-icon.imageset/star-icon.png" diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/start.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/star.imageset/Contents.json" similarity index 100% rename from "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/start.imageset/Contents.json" rename to "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/star.imageset/Contents.json" diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/star.imageset/star@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/star.imageset/star@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..2e69f9894d53a0791d27e4e927e2c2637d0c6b2a GIT binary patch literal 635 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(*%_z6EOC<})f92`o81iOXAaApSfQvhmkQO6*2p3-z`-26OCN#86 zJYbno|4rx;!@`0K_x#Ln#`k?sD`NQbe0A`RQ-0anv;QSTuUPhfOK#}pekL|k#_xhP zccMHQ)L8;p_swgVp2aB65@1=|DOS+Rptbz{F4jK|3{x+c-(<=YaCrJ9c58z*NLpMs zfr&B1&;GR76oyqUFZ-hdZf>sU+Qj&Q;esk#obr;*n`bY667%Mux%HEr6MKuKs=uF# zNP8~3={!Tx>uF?^wX~KGf;Pr}+Qdg(n72TB zOTAt|OV?V%_p){z9F9fro!_ep-V9e(THUc{PTy6VIg`RUT+dXu23*-=&M|$)cc#RB zmukWUCQiKYCu3`f=z>z6~lfh;pgA!vy2aACKgTw>| zH6{jOA%@d-3`(j@3(9>PY@%2i=5aXe$!2nxoS?`QV9V(>hcPWXF6;cdb1YStDt<3r zc`k0!0_}`FA{~9EjMwaUm24=l+gbPerjUX(zk2oAKmq1prXz=ZHDxR+^|qd|FYEF! ztABcnb1n;)L7j-pRF#g||M@Caujc#;oT^*6$u+cMNm%fzuRk|-?KJb-%Xr4JBo3G= O7(8A5T-G@yGywn)HS%Qu literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/stats.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/stats.imageset/Contents.json" new file mode 100644 index 00000000..185d30f7 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/stats.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "stats@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/stats.imageset/stats@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/stats.imageset/stats@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..208b43298d05686d05108465d9d1dfe43686101b GIT binary patch literal 684 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(*&8RmySmYRx|I5?GG33pRhrG=S0!;sL+V7B23W5j>i13WY8udq#+a=Mkv zR<9{QFWw;R)AjYN45ywt`F1{Ao!jytMsI?@fm~L8>%$nm0FhsOy8O-sdg)mLzs|1p zZ}!kz&-&P=b>2Qx29@d0<Kbynp3zt;3IxN-sJx1k)zJW^7<*_|fw(=uPk5I~=YI z4tqG>t)8xJnDXoSAGXMi2lxC|Y zWs9cSFWAzW%bH7=e?OY6t|nmct;IS{WQV4Z%>_a=BF(@dR&OY1!?x?PLs_rEF z;MOcgi3wHAhHRU^bKZHyu;E=@`Q6gnrmq~URMMYxTxBp&-1^6HjeC;%ql{W(cX!!_ z^fS+V7|fJ5+Lni@GAVL@Jb+M$Q;0tS2yt{bg+85>qJE>Pz9!ebk^v(B)gRUx37 z<(U+N2Dg^c7ni5MrZYu|e)0Glk<84&QrNiAefPh&(-X?StIoK+bke())w|+9DT)X^ z^165N*4LwUt$+P8CRFL@uUh|W`i=WDK=J(GVjeukZLZc|_d49p00f?{elF{r5}E)- Cz6x&u literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/sun.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/sun.imageset/Contents.json" new file mode 100644 index 00000000..d30f6336 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/sun.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "sun@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/sun.imageset/sun@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/sun.imageset/sun@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..8f78936956ba3ab597fed2c5bf3b8bf16be02303 GIT binary patch literal 1108 zcmV-a1grarP)yuJ37Qijs^fuMDuCn8361r0_^zhUyl(0IC1X!LjJ-^T+8vSYR!3cnDnS2e_^n! z6SuWhxy?gEX2wh3gWl;try)LT<~?c>Kw1c0LNqtOH(|%QCgK-lO#&zavD8pCMf9@} zs`zuX1qEnp5MU@MKwpCZi|3^m3}F2YGH|b~<4EvI2a*#W=L%et>ipm_MI5{(Ds(#B zEA$>y>I8>^A#sFe5wRvJVG;r6CNjFD2ylz&`%n*hI$oUtz!&E8^DTK&_-({Fu6>>! z_j*f|w~^}hgbx9Q=$zP%;m_0XK@;5;g|1pTm3GR?2PiO;tj2UYFP^<0FPJEoy~e7-@Y>chE%ScUOWu;sMnC?=nRmE(-`CBOhT3&91hJJ3`c=Nt?Je z#5`M8+!3N!;$ds4w*di278F2wX04>;$hC=x>T8f0005=Nkl&I)eas5(Y-! zm*xC+GR)Ac0s4Rh;NAb{98uRNknCog--&99XZKoc$&wMPUkWO!BL#Z5~HK)LIO zvaLGto?tw}axQM8gaFh5$5PJ9E=gktHlZax+GlO#J2m6hx*a92n6tKcJV6SIn6Jb< zii|#S-`=Dgc(;0PiDT)H1b!SauNeS71c+Y~W_{ltM+UG6xcCA9p8#-S#J$))Qt?j( zw<7dq$z4(Vw9k%IgtB0OeDwfbf&e8|gtDNdicmJ>D2>0MAee|zDMps~ll7^H!J3i; z=mW$#g$q}q#V15xk^l{wnI>_y43QZ7z6}(HQ1*r~5q@()B)k06z@@XbBuCG&Z5sHe a=p>4kNAL~p=p_IE0000ns_qz-gC}9 z?|aU?7;bGTE!kdzAV?7%^9RESD0t-Z>BEpN4F;Gtcs3f#yczEA35TW-q%bZ-I`z)b zZiySM5>|H`q7|Rz>uL7xftqL1!ooXj$cf1G8B; zf+T^{iIH}P(@8!GtORMr3HUiJq@8j&DXR#Lf1xi@7K1pZO7D=ngTVQyNQw2pAWC<7+*&ex9_o6V;wG>1p6k0bd zX}LndlHqAq!AXq3MbXG>Ra(>A_v_sHQng{sTvN0 z!HxF#SG(j{um=rvz4;-rK0dqzXGVp?F|)VtG90Y?^rlX|T|S_vSd~ZCW*{iCG1v%f zwC~VGz8(ry3Cx}dJPY750Kl~?cS78>Q!1W5KA2tXsU0aw@BIDJV)B7onZu@u3j_1tF@X_u>Ye3@w`*=bSiE@S z)U-NGbe;dUt|0Juckn#ply zTqMfL$-#1@7{g|WBnpMXsSy|$01yF|ToY%o2AC|XXB1SVgVEsc6{E?B$dw z@bu*sX!ESB$ub=#5HOL|U=~R*vGYnZK#k`Ap)@^f)N zDA2$t%7`nZ!NI{%;$W3n6(x~G2P!0y5h2ksX;6ejES3fZ&u~=?v6m)I+zi+FiW@Q~ z*I5j-8CX`4EcGsFjA0oXnYuJi&Fzb9PQ7Waac*Dab8|1$U}ytrsRm&BxVIR=)5Ue>RgHe`U@7>v1lTF6iU5>l!J9T<6_ zI~xMJ-}DIPaCyUEJUEBb)T#)bqcSX^IebM?4HjQ!J9A{ht@EjHsI>Rf4G)@YU1P%L zmA3DPI@8w5u7142)8=YZ+#NV@yzbJa@E1M19{OwUHx8cY+10bk(VG(PIm9Q@;QhRP zh{t1=_I)xoP$`hnbf4?U>ay?q+Zwx)PnaOg)*6nNRE*s^TV`E0l8?lWh8!BZ=bzLK z=h^GRM?<{53X;Bf?j{y(4ZSIBz&1?^I+Np4@3nNYe>;kndmNRv6Pv19CWSvAzErA^ zj#D2xDky<(i2ZEg!`7iY4@R^^?!c&i`~v*2_3OqP%WX2h{PQ87pL!xKa8&H*dQ_WH zdyTEBv+eK}+9#TLtx|pJXqltqb&P65<0fkQQjm)c2hTre1oKB$^}c}%S~gT?LLCB^ zk)>|-FU9%WE1GQD)GI;fhZN;+opnO%xPZfX1}m)z13RSWo?;HLwUlIB9p755lekWpSy82zyJ3G>Cdjc zE%<|2-$PdCNY^<9R5$*ue0?z4Y3yVw6DR@Oe%(T6>%PJZwa)|y>% yD*4Q3RXn%lI}0a#o-Deyc_bpz7^X-n< zm{mk4cP9V8+i0`8v9!S+N^v>*<%JliD9!rtGiH}?Yo-dmlJgeFPE90j7K z$drg2rkJ#P>^lI2MVRz5g$71JIh?B2aY@gutt3#bA@T(i^B*3-whHL&7e%-#0jF_#lm)6k_tuj z94a+4Gn0}TL_rLxR63i@ws9~RWXywXH0w~AiL5g&pJ5QdMukDGN7aZ9v@y!$NIJ?T zVVS!^YR%d)yCahpolT1&gQ)sp;%{WRV|L>~RzV|kwaqz$SevsIhVAjLbIM|4! z8x%0+zT6f{&w&iE3`GnH2$D8a#aI=BB1RRW2cdWt=qHgW)H>UN{~Lrv!V&3=s7$AT zMFK7fmlgBi+avu3aYM3JtAb?6LM`7c)R zQLIf2T0It702|a9urkVkXu&s^=BPiE3q3?AV1%+UKGuhGd5cwkD3`a`$d6*FSTa;w zYyZ>gnIlX;w&i=_Vw?BUhjp0V4VbXYj%tUnpTZ3lCZX|23YsZ1z`$GminOv+tT!^H zd2NAM)0fk@4jr$QFXX!#XE`7b|_08bg202%lM4_)8~gZl)kPk z<2mc7$AJh2&#eaUDYef60;J@+;lAkX`28A2{^T`$rp4-Yo_ew`U>T~OU4wHb-tIjR zJ=ZsSNL`NWBo=KgTirQHZ+GT79QeXzic#wE$=MNO+t~J@4F$ZOeXkrE<`y^0{m;8? z8(EKYnYzuOd+$9JUJvnC8G3vM=9Dy7R39femV5He!s+gZdS|)0{nwW95yG{Aj18VQ za)tR$4GVk+9%V1^GPk!q&x+kq-aK^u=9Luphj!xEy*wrRasnW+~Yc7`h2{4pWP3< zj;qTW_qNYAq-gF;G%EsnOEltN(jB{-#)jj!jz-11_UHTX?ny1n%Jsa63UG?{&Bn#j zG#YOswE84MYo)hUUj)_=9ctV=pL^a+T=(;n7fB_|0|Sc-eBC@xJgvO=swD>p0Iy%u z(6!|=y&EaBV!d-IXeC$Dmu^3Ci!W(9=k<_j*`0SOq&(4iW!0dUWw-m&K)>2ZNF3ON z^ODMsIo$Wy%Pjfv(qWjI!{|C?eZ3;cm@*#-YL}hn%8OpM;KCO<-XPlRD{7wO2a`*{ zRM2v`q9xICmUQvUT;O2Q%b$RBVV-|+-=(a${$o}3^I{YF307VfeqwX^@wyX);x#^H zxIL7BJn~J|v+H&qW?t}7#|~!owtLGZSBbw&p}0vXt!2JP z9cTM6Av54X21fG66^&*+jIe^^R)oA(D(v{d( zHw`C0hyuDo1lEO@Et@QziIRhvl)^ZmbH7+Tz2>fL2zpei&DeS_bmD=m_KfIANTc_7 zo3!xC?23!>!su&@d%B@V(BRtdx8c{j6AxZ^wOfDxg~$HeXz;C+XB}3Gqu;#Trr`CP p#&i0Xj;)xLQ@MJA)OvTgzbWjyqK)EQ=M3yW1Vq9Z!AZU}?;mT6xp@Ep literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/thicker-screen.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/thicker-screen.imageset/Contents.json" new file mode 100644 index 00000000..bf860659 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/thicker-screen.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "thicker-screen@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/thicker-screen.imageset/thicker-screen@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/thicker-screen.imageset/thicker-screen@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..6479a7401bf66a4426518d3478278993a5c28039 GIT binary patch literal 1157 zcmaJ=T}TvB6u#*qCfGkn=EG&y2cvdoXa963SKXaibE{EX7g`9yaptOn&W|%!cXgwp zCw&Nfh+cY%pt8u99t?_p-U@omAOfF?f|4kS3RAnY?yf;?m$`G!J@cLKoO|y#GriqM zYisIj001t2D3<62u;S3-z4K&Uo9Ggf#CABdx{ADSt7A(5R5q%qG){{rIN8u>NihZx zoz+b89e~#MtSQMO2*Uw1r0Nms^Ml6}RFw#IDkyqIlSjj9*OZ0&rn*z|)QB8bsP;D4 zn&k+AhOh*)+Nf@G*$9>A<%sWu84BhhcqBqaoq{ke_CnsU5De0OkL+bx7z)vBAQ%d< zhoR5Q`WP>HLLN521w)*#85Rabs#(e)mlQe+wa6+$4P$I_43o)Z=!~B>tRaRChr>W0+VGkQ7 z$j1oeGA{?};DqPgZvvIEwiiPNlZDL*#BG zWpeB}Y9*isRp?0(TS2BXAel`C>-ggnU+%6F8%+q&)Tc$Z7JzCO`|D~|Wy}3DU-zD_ z8*E&B^Me2Yc#@kwdnE7u_4)uBNNi){?RxGNaV&>y`Q_8y7rfQN$zur>4|3P{MJ8W} zfsgC${I-YNXQo@~Ru-=0HrwiVIt5?}2trSDecPRDuGv~J=kgu^H}-S{!R3{;<7<_# yt7qrGGv9Wm+#TWejogm+?-t@&`{(kmN9l8`Hl!}m?q|uH4o@Q9EzHOIFa8EfNM8d0 literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/ticket.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/ticket.imageset/Contents.json" new file mode 100644 index 00000000..c8053b88 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/ticket.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "ticket@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/ticket.imageset/ticket@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/ticket.imageset/ticket@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..30d02e6ceaec082969cb9bcf49e1137baacc8a3d GIT binary patch literal 607 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(*%_z6EOC<})f92`o81m-oMczXS0&EZJTl%g9<}u$rAXv~`++1dS zmmxl5k(=%oc3TU*ozvT<)YMxrlw9XXV0z%}|8RC^k^YDC`?mBwxBs#9rqRBe0zn_n zwr*g(@5533L5`txPvD=kM*kQSHgtVwSU2tC)pK_43p9)xio1U-U9na00q^lj-InS@ zswdp%N!&9$ovm2#=wFDiooY+Idg70b_E%f{CE3{@h}>$;Z{Mph>Bp4rz@x^eB+aMs zC0=QJ-eEdP@yx9c8?#lN1KRavo4jgP3Z$L=A*9%I>!YRff~XIcPAmBIC7rfbbp9`| zIbQy!+Ln=l;s1XJ!!%oksh%V2rQ(VY#twJ5T+xmUSQ2cQJ3D zazXT;;*L$aDkZJ#72K1jxj2s%c=awj26}c_T*TnsC6u+AKZoZe0a7*WkvIS=cjq^wB|QQ z{g^d_OL(zng;Ua*zp`fzPUpCxbLhDp1KkkVB>ymoVApgNDd8hFnmnO*{Qk>5o pc&p54J+HZHM*IEg*T0z_GySr%SKd2Ys~i{x44$rjF6*2UngB-z{OJGy literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/train.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/train.imageset/Contents.json" new file mode 100644 index 00000000..1e8d6ecb --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/train.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "train@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/train.imageset/train@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/train.imageset/train@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..bd53a4e9782d81c5440ccacabb3527d7dd2b271d GIT binary patch literal 469 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(zz4qVF@3KI;($mE;*e zl&S7_OmjtWfEBlkv-0jV)@|;sVnc_WlTyILlzzw1CB# zy~;3VTgDobg)`2U%DyV$Z3!VSo*E(3b m=J@)mrqg~ZOAL)0>Jk$ZABxC-le+K=6eOOmelF{r5}E*-9<7N0 literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/tree.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/tree.imageset/Contents.json" new file mode 100644 index 00000000..2367083c --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/tree.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "tree@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/tree.imageset/tree@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/tree.imageset/tree@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..0e4b9e23d9c274d69877f182272bc0341f6a9076 GIT binary patch literal 516 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(z{kB7OTQ88_>FMGa@+RyyZ-ausYmS~r9y!lEdLD87VD2E%j*^mE+k>B0H;}xSND_Ed(Sq`HmeZtccH%(yxv{?)xbQv{to+;1ApGy zbHMF@r&i?E*JL$xKEbCI;s;hQ$mAW=I}TVK7K# v+rYt~6M43rRXX~V(j0DvGdJ`8o%`RU8+VAY&*ph3&}R&uu6{1-oD!MUG33pRgS^cKJg)yWBpU-I8U>BGlv9{DG4>qb z$Z;@RF#XGg6MnOtRn31*t7+6vw*SD+XduDk7H@NGG6P2g6djX%@%#XY_dvP7(f5M_ z0}~Kwd`&NWkSDT}hriyeYQJi&2$%0%k+msrU(RKzWns{tb3?0jQ6j^}OW*Zg*fLlw zy|GB-QyXK&(&w%hcW+lHaVThG+|l>Y*)k-kW%dJ3vEC0tWp&|OJey3-^$MOh?S8OK zY}4}nl5=+(1?jDoS1C@F{bw2c_MEqyIGdE62HQ_jj`{c3rzctn9>_}AVfwvDG`_;{ zdz|baRtARu|Br8)`2pzttsw8eoeA>30LyX~uLVn{IB~vHnBu@$QdHu={f@!zoPMAZ z)3=*%JpM(hzrFD(nfJeN!`cg67KvH{b%z9H4bpk+A5SS*p8da*T|l2h?(!S07neMb zPHt*9*=!Z3G>!S-^jXdO7qhp?H}PlYZ>|x(U?Zf!h>Uo-E11fX#1k^pL=Rr)zP;e; zW)9_e^^ALm`k&;ty8FAjudHwUw{H3SS7H&4jC%K))_xFj>NxyHKK1Ecpa&Q{UHx3v IIVCg!0F5EYivR!s literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/tshirt.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/tshirt.imageset/Contents.json" new file mode 100644 index 00000000..60dfcc1b --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/tshirt.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "tshirt@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/tshirt.imageset/tshirt@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/tshirt.imageset/tshirt@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..ed5dff48459963f5be123fd731516f1014e2ac97 GIT binary patch literal 394 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(*&B(Uw*&Z7p|B|PRW5}B+fxImS0xt7gybf>*`7v2oaC$JXd#n&q zQFy3QVDIfzbp1&~o^#*Kl=@#6XI9=6Q}LVxM18B-<{jYhIq=|x>5StU^GZ)HI>=+K z5H;cH=`($j&sv_R%(OZ!Q8e9Ga{01Sjr;G;82smYnsakX<%vDDJBw-^BIl^3u?WZ( z?~2`XBfT_iak1O=)8QNsAKW_5^z#nywe8p6XxwL5?{u?kMvmi`1I#PTTD7fT8`qXi zXDv7?$iOH7M-8``Zmiy~t-`=mkj#(|^wj_V8*W510vXmI-@U!y$jQLK!C?4%`ZXRq omW#46jjmr#Kka7+D!>U22s3z=YbpQq6#yymboFyt=akR{0M40!Bme*a literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/tv.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/tv.imageset/Contents.json" new file mode 100644 index 00000000..357bad79 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/tv.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "tv@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/tv.imageset/tv@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/tv.imageset/tv@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..11b24e2986f2943025bdbad98d7948c449999241 GIT binary patch literal 716 zcmV;-0yF)IP)hI*z>dHMc9Xh+Y#qMu0ML>Q0Ip8Y z%1W^nu5iGN1u_cDeC}D)F(j!G2)QZvi;BLRP$d-`m2wdb1 z&2W(hC;wq^v^yhXath-t`**0RR7KO4$Pd00AIL zL_t*Tn9&h~APj~xf+M&|-9Sd@2yReEaD`S<#wl)F#&_KBR-#p0w zDey-C01E)?7mXlyjD$A}3;=^*0K+c;bb3z!kl-J{5@vp-tJ^R2qB$zzOy5Bh*Qm_bJ!K-tBNhT_W{S5kYNcj^EDHZ`KOy zyNvqh)csPLUILz}5P(T-8%xt$o4-_Ke#yzrCFz>eI+mo}VAo(gGnkK3z+1wK`>K|hO0000{!u}gCG>#5-7nE?BM9YbPzj8IygI!4onAk9ppN=bYMEr4!ED^4C4?)4uLT2%zh*) zvYW^90#Hy;P*6~iDj0w>fG+@d0FpS;=N>?ltMEY)yv2!(vOxtv&^xp^MHb(ZAnCwg z0QHM;xnim?xg%*3G0-~-UsuCo!Uv5xD%WSysfAE(3~hq&AYL`$)wQc>665OTHelJy z0K9DlkM5y1K;TUg#5e0|;D(3$0}bc`h`&-UoGAz=$^vFF^Bn^Wo~ofsMZ75lP1W%EPXoRK3ZHG7yr<(DyEs;I>T( z&(s7f1Go}m%Td$CacfMCY>xps(mMQd6#q!EF$qbL;>k=%?mpywW@bS3F8|S^tp7g% z00960>_1|m0003INklA-ZL zmpGFHj^hxLEac7Xi5&QUH`!!inihDiAR1;ctiXVLjsY3a2^K%#h#JrW4LIPC3{b!* zMEvMV_yO2iQ2|#02Gp($Xatu2=(_Z!?f)9bG+R9RCEf}2+`j*7E8N$7>yvImheuRo z;_oIoUde$=1RX*H1%W9|Rj4hBw=1IGs`w-D^en!NL3jn+0$g*8(4~F?9$Pu>Ghh## z17zC{wWP?x%m8~UV(RgQuS~0mUVh^euQ~}v1QY&k7U*jz+Q!n_zMcGyF+)4dbZbU# w8N$fTk1I1L_=KJi`T5qG_2rUp_Cz9)NF@H_4cIkWmjD0&07*qoM6N<$f|E2zpa1{> literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/umbrella.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/umbrella.imageset/Contents.json" new file mode 100644 index 00000000..05381055 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/umbrella.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "umbrella@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/umbrella.imageset/umbrella@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/umbrella.imageset/umbrella@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..c958d9bc4723d11383cabfed8c09a11d4e12996b GIT binary patch literal 653 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(*&FFQrXJb2%7V~s*40$rck+;P_z;%C%R|Ka8Bm0AdLI%DAj6y4z zRYIIpL!7=F`En?>^0r>`n_RBQ^2yHlY=FYKUko!CGm@5N>s(`RU`#NV&{I4iTiO0Z zpy4CSf@0mDLJsbG^Y~}Hyl3=ung#<8!xhel$|AO_D|T;T_^{MyoB6_*vX62f-F3`w zKX$=-F?*oB&OUJ$+3e(C!K2%C{PSk`K3V^6b=#}FpATCfMYrvKvYh3KtZ@3z2Z~EH zmrIlCHH0pPWx}+`Lf1T@|{0h6|O84_$ zU(1I%o_4smTRg*!@x@+ao6|i?+b4d%)UigAZNatO`%}9ZWR(kf7d$fhQ_-$;(t_b9 zGXul_|2~H+X8=R&7bt|@&Pe1vtRT=jzs1wxkV*(s(1ak)(hXJ-s#h2-Rp&DAGWc^^LgW#^>8aDeH7;1uQr2A+z{56OD7szc`d;bzD=*x(qac5%+5^Q;!T z>tAet$RF!C-7drL>vSfKxAMPFJ_%CU|M5CQz$N={|6{f?Y?#U*z`*3dz`?+%z`)V~ z;g~QxFz)!t&h~nLs6KvT!MkOnEyD@cT`sqmS~6s-UAW60 z{?FR9{3%C*(i*L;YJChPt_-tY+a3tzcyDq4UCH^?`?Ga8?6(!2m#^lN&trGL^I3}5 f`*(6~@425Z=Qr6ia?94oG5~?6tDnm{r-UW|hl~HD literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/upgrade-icon.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/upgrade-icon.imageset/Contents.json" new file mode 100644 index 00000000..76dc78d7 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/upgrade-icon.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "upgrade-icon.png" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/upgrade-icon.imageset/upgrade-icon.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/upgrade-icon.imageset/upgrade-icon.png" new file mode 100644 index 0000000000000000000000000000000000000000..e28e4529e38a5154195cda4c4663b00165f63360 GIT binary patch literal 860 zcmV-i1Ec(jP)u` zgJD+z`DOr|0Neod00saaz`P1i&wA>6qW@Oe8UP&tw*eX(j>c+Ahc*B{cXl^bc$&kM z27UuD34*UC0w^A@&&?6N$^|W z@JfZ3lF&$$yi)KI5`LA)t^)Yf65P)LYk^NK!K8TUiGeqX`lOOzj}||%@GhXAQE8eV0RR6)Oz|-Q00C%8L_t*Lm}{|vFc5{0gh+@4oD>H|0umyj5|Drd95fDy zggEH^vvY@GAY}7uL(a_pg0P&AJaz$q4>JVZ5&+(g@mD$<_x8-q^}`;}N0^TR-~*u# z0brN|){~d;F&_)S1wqieal9A+SOTc603HA&#gmad7Qi;Ypm+wD|B!dg0Rv+q1%OmB z0f1^4fC}9>?gF3>Jv#0J;D0mK4Fb^Hq^|}6ytYZZ1_5;Y#HJwt<|y&l5PT0#p+sd6w9k1T0%5Me{G7x5{&cWEXxzr^ z_FT!##Zt(6m-vE)FV6=&B zD2ed(u}aR*)k{ptPfFFR$SnZMGcefLR}>^BXQ!4ZB&DWj=GiK}-@RW+Av48RDcsc8 zz_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3diNuokUZcbjYRfVk**jy_h8zii+ zqySb@l5MNx2(nNi!Z$#{Ilm}X!Bo#!H`&0@P{GVh&(Orw%*;?n!N|bSNZ$a6%ybP+ ztW3?UjLa3FKnZADQA(Oskc%7CE+EfVDWjyMz)D}gyu4hm+*mKaC|%#s($W%ShLMpj zP=#)BWnM{Qg>GK4GRy>*)Z*l#%z~24{5%DaiHS-1r6smXK$k+ikXryZHm?{OOuzus zuShJ=H`Fr#c?qV_*B8Ii++4Wo;*y|LgnO|XTpUtakg6Y)TAW{6l$;7wt_-rOz{!z^yTu%*c~HG6xZPrbQ?EYIG5VmWMT%;e z5HS6KnDB%P-L107<`|xryn(xJgW@ zEIgTN!@$54M6c!%b|ZqXo@u%s)el5U!$rxefKS$=M>ak2utpYiuQ_kSk5+gX3` z{<4PY4%|0bZynJ8xUDAJ^Nfh9v>w<9Uac zA8?s}uBGPl#aW)s)jTm39CgfEoK>QkmtVzloR*FLDDa!HC+gpc6-P2k!+jQNT?p-} zVQ(|)d8ycWHKV-snSpS;*%Z9m~?Y_Nc`T=DCUO$E0Ox#_kyoyfX% zXeFc0lMsPO-(U-FhS`m*hP-FgYvxbiHsR1smK((^b0fGGam6sd=FEM4DeZOjqZ50( z7dxD5*f@p7zrne4wfdIpOWy`0P0sNtTJqGMX~z~8opc#@Gl%OxVz)in|A}!81H0Ru zAg4Q%1dAsaG2dX&kKO-6-QcGBH=R_y(@ZnAtgO(p%qd>C*~98U^@GK8Zd5TgeBAbi z_XFRLww0~sxtDQ_3dD=_SXw62Cp@%($-i^?h`%qY_qHE9c!Zv ziyKa>JwIr>P5*nr*N>5#b>&&gyjpHE%4MDB>u=~4dSIq9efwF_ibl)t@iC0Er@sh1 rpjs7jMRnI($w!lOs?Mf&*k*E9wf$g@(P8}vDxy7I{an^LB{Ts5rJXrk literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/watch.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/watch.imageset/Contents.json" new file mode 100644 index 00000000..f4750a55 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/watch.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "watch@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/watch.imageset/watch@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/watch.imageset/watch@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..71222ebbf53b9bbea3c9968e874b1d5111921652 GIT binary patch literal 729 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(*&6rvg+XGa`Xz1zU81iPuMcx(#o;GVI_Z@-~je;_byn6&CPV$yC z?-sn{V7{aJ;FBc1g;Q_Mx}mm5qUE3bQW1tHZ;Oj|@3CZHf50Hqz+AwuD)8|ax&U0R>jR}TSRTvjqTTd9aQ3)q)^&rtBz>pz zUiUqj9ZXmROc}1oaJ4aHnI2rk$iTyB^7}h01H=FSIyL%Dz`)Z61>W1~2YC-G@VMGC zDW|ZQWw@PSOKsldxH-_6NqWod7T!zTQx~mTq?%^K2@u3AvAA-`@4r8Twm|4b=X*E zZXOi-;SI~dsar$K_8()FSFcFBz24>Rjos|R7xHtzAG=$S%DXB~$f7wxVcVg5yw|-1 z*6rCG_9Ernd%NRrKU}Yva!4;;_tELi(KCxv-U_xTJN)kFy?$Xw=RCHisE@zvKdlL< zxVGW%{$@i?vH2?eduDYo9d);;{KCe-c7Q>GfjNPJr-9J`#MyFOn)f7A90L$|y85}S Ib4q9e0M&mV{r~^~ literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/weather-lightning.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/weather-lightning.imageset/Contents.json" new file mode 100644 index 00000000..cef9654a --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/weather-lightning.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "weather-lightning@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/weather-lightning.imageset/weather-lightning@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/weather-lightning.imageset/weather-lightning@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..048e7f3ca55797199fe2665fe8eb953e531f3386 GIT binary patch literal 646 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?Ej%Ak4uABv)k?-UCuHnJ)ez zK$;1NK|leBHJ~(*&FFXUVd*>|E#>Lr81iPuTizxEfwuXA5(|}gH0CXkKEbw$G4BD# zj>a4Y=>u#%7X)9;Pm<~pn$myh>!k1Us+IS4XRmJ+P;_efpxx)dCgQ*-`VqF=l6Qwc$0vVlm*T1WK89SkVg98lh8=n>JWx5e)ez0+S}*9m*2>Yz1AU6Bx2yvOQ^fnEl32 z<7&enP6mem|835#P5_45dr&C7o%xWrSwW;FpT+G3N6!Ne*~UOCCS?OB^A*4_)863t zn_Va=M|Yz7slv{BpPGH|?>d?=G%$S-+hddRMeD-s&ZBD{Fw9~26L3O8lzUZya}vY% z$-DkfnDI*RqyEL`Q+CZi#c@17-OiqC$9u**+tl8)KAOM#I#27}`P&{`wmryoq<-Ct ze?Rp96bY~$Fcz^e`d58-zSDiRJ-c_k@%yg7zOw!I^yz8k_lv;D{A1M82@=ZZ5vtpC`beg3ieLO|y6AD0g? dYqJZ*0>RcVjM@{o90huv!PC{xWt~$(69AUs5GMct literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/windy.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/windy.imageset/Contents.json" new file mode 100644 index 00000000..dadbd99d --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/windy.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "windy@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/windy.imageset/windy@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/windy.imageset/windy@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..a517262ef69d429292d9fed5f4d3f0ec960c285d GIT binary patch literal 792 zcmV+z1LypSP){#1zgD?=>5>kRnPzmWE?!a^qcMx}gJ3t+n4onBo0dxQzI3GD?7+C_LJ78ki8T~M) z$F24r0yuEsz=3IK04ab6fD*uyMoHg($VL)p0GVUI48Ye~j-LV4g9A*Bn&xnD3f!|M z+eM)0W}lJcL2JxK8nIU@?ffTzmf?Iq+L>W-W9)U4bl$g#0gzZuY5JCr%+rCg_c>KSz>Xp2`mts3Z3qB>hS^55P^}mO)y!5n zTZ4$Llc2<7h%;6#gHs7^3lbJu^e<63 zNci3p0m{)=_u-)SLc-WDu{-|$`0727&}~$cH|Ya>;ZW?EfMIoL_DsOAr@xXas&^vb z7XSeN|Nm*NYXATM_DMuRRPC6-4Z|P|Mc*ilz$k3cYycaT4Vq1o4blyg4cZI6AZVL} z91J{(3lf&TEt?O}>2x~BQGf*=zy!PmuEWCbLIs~rfC1J@#P3ePP?7N62{2!RI6&7v z?ADBM)xxy*3GtdnP?^d%gNwvJTQfUj;p!{k7JP)4kbtRR@9QYmDj@+ytmB38dIGLy zzOV)6)`nnwql^--!R17(MWUZ5WrSQJju;z#)(Y#yd5<6zuq8y;KhE03xlQ6DD)$^- zf=C@z+$MVdvy4<*T;fAykp4C>nRfWKHp!Jw%>=(gys!1+M1|{Zj2z<}_8g7;7uwy7R`zsp40$s>SFqWDr!Ah-!+|O2Swg7+rw^0RvxH&? z*&Mzm=7IzNrtFq;&y>u)zW&bBzWwK&C#gAf3jOcUZjfVOlsNibm;Hm+fpcAN7_Vq@ zSG+r*|I<%&p5y`jO8>wEuNxTVEn=`zNbn0hFkyGYo9G9VehZkaZSsHBEpUBG-PFTw zCs^JvBnaJK6T_i;>Fw{ZVwT*y%(-0cfu9evX*}1McRu6(-;XSN=3M0UNaM8e;?#Sv zcw&NdU6*GQ*S|t12k~x}ZNZ!Vax$vKOq0x;bKQ7l zU8K<@6tq3H>lKQ=GDzuD7D<>;YUoA>`Jlb-tKd-_{G4g8tM#}M|j{KA6@ zpZ~YTc=|1wZseS;_N(8e%W>}V{5DsW(nLstL(sO>R8o3VfgX$(6r ogygM=)?0ZYB5OsoSfaiEs{r?^r_2`FVdQ&MBb@0P)w`Hvj+t literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/wrench.imageset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/wrench.imageset/Contents.json" new file mode 100644 index 00000000..3acbff96 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/wrench.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "wrench@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/wrench.imageset/wrench@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/wrench.imageset/wrench@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..dbb90fab1e961fc5baec6860cb94cfd6a3cef195 GIT binary patch literal 711 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?ElNAk4uAB>TRfbOll}nJ)ez zK$;1NK|m3RHK4Qt0|TSyg$R3FAT8?Y;u!MgW-M>Bfe7mZWkybq87wLf5-e`W_#7%I zc%D$~Alo3UvZ39qQOElS=hK)6lkSKgI{a|)-dyGlZ+0;WFo-sYIf$>~`+o1?OcwTi zT?f1SLs=EfJLHs&IpY1BU%0y_3GC~Xa*+@;Gi8{<_V9FA?_$4hRe@~_nLZ@4_3rgK zE6L0GIlEJ+rK$A;7o!U!Q?AzzM-D}03o)nP!Y&;grrZzXB@`7)W(iztxxwlrESV(E zk*6|c&O*aooDWl!S#Akc&X))hO5IzuK5wLs%qp(&=RL;4! zbglzGnH5|^?_$|wD#KD4N;yp$O9v9Jafyed^4i>z>9Y6=r0d@c#ct38PIUNWgB#?7w_Kyb0 z+qZeUNx;8Fzz#S81yBMl@Obl9{wrkcPM-ajmH-!^9soMmYk5}^I_L;EjTlq#5 z8t@a)c?ACMoqTiiKtVbYT%A8iQ)PnUp@C{^u8klS%zvnX6HXBmk z;4d>K)Cgc3W)x6a2IAri{MB#*l>l&InPm{JuE7_Ej4Ka;S3qwOgkmk`dtu6_sjV_0 zH(-6O4$XEs7~2J!EA0dy?toMZ7xohj9;n(3xLAS z8A4)GS{lN$+))5tTIAZZ^1C!whpzQs^&cA)e`xwYJ<@G@?g6r2I}SjqYku;;z-PEW zOg-y5v+RRY|E2S+0xy3Ge|Ha+PE|t?z$1R|6KY*sxi#xG>s+b?5r72v;`dCyWyM>i z9{>OV|NkK=E5!f+0nAB6K~&XQ?Ty1A41FUo0wZLEZqSU74Vn?M!F7Y{2A2)O2FV6w zglxe5aiqJdCJ;UXmXInD0qNZ`K; z1#SpC6f=1X1TG4`^?fJ+7@5gFkbu&`8vri=7?{at0QhGG;0<9%%S`G3!84VNc8^sP zQ3$7s2oU?Bmqk+tv_%AULf7{$>yK`O^8}Y> zNCUY4NrU%<;E%j6sIAqEFqYH~hqUzoJsKQs@+h<{e#Ls!bjk1YTg50YCP5*h2}crk zfxKND4vR~^KSRRkafq2hLlPmmykSfM{yjTvo`=!^zUhhlhid*ML8@z!$z)-@zl!)j zhL?3Gydn0jcevODby!+cw8d{{o3mmxKTS002ovPDHLkV1hec&VT>_ literal 0 HcmV?d00001 diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/PeriodPickerController.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/PeriodPickerController.h" new file mode 100644 index 00000000..2d1f7946 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/PeriodPickerController.h" @@ -0,0 +1,17 @@ +// +// PeriodPickerController.h +// iHabit +// +// Created by 陆钟豪 on 14/12/19. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import +#import "GridPickerViewController.h" +#import "Habit.h" + +@interface PeriodPickerController : GridPickerViewController + +@property (readonly) HabitPeriod selectedPeriod; + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/PeriodPickerController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/PeriodPickerController.m" new file mode 100644 index 00000000..cd62aa48 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/PeriodPickerController.m" @@ -0,0 +1,37 @@ +// +// PeriodPickerController.m +// iHabit +// +// Created by 陆钟豪 on 14/12/19. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import "PeriodPickerController.h" + +@implementation PeriodPickerController + +-(void)viewDidLoad { + [super viewDidLoad]; + NSArray *periodName = @[@"Day", @"Week", @"Month", @"Year"]; + for(NSInteger i = 0; i < [periodName count]; ++i) { + UIButton *timesButton = [UIButton buttonWithType:UIButtonTypeCustom]; + timesButton.frame = CGRectMake(0, 0, self.view.bounds.size.width / 2 / 4, self.view.bounds.size.height); + [timesButton setTitleColor:UIColor.blackColor forState:UIControlStateNormal]; + [timesButton setTitle:[periodName objectAtIndex:i] forState:UIControlStateNormal]; + timesButton.titleLabel.textColor = UIColor.blackColor; + timesButton.titleLabel.textAlignment = NSTextAlignmentCenter; + [timesButton addTarget:self action:@selector(selectCellView:) forControlEvents:UIControlEventTouchUpInside]; + [self addCellView:timesButton]; + } + self.numberOfCellInRow = 6; + self.horizontalSpace = 0; + self.verticalSpace = 0; + [self layoutCellViews]; + [self selectCellViewWithIndex:0]; +} + +-(HabitPeriod)selectedPeriod { + return self.selectedCellViewIndex; +} + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/TimesPickerController.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/TimesPickerController.h" new file mode 100644 index 00000000..7137617d --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/TimesPickerController.h" @@ -0,0 +1,16 @@ +// +// TimesPickerController.h +// iHabit +// +// Created by 陆钟豪 on 14/12/19. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import +#import "GridPickerViewController.h" + +@interface TimesPickerController : GridPickerViewController + +@property (readonly) NSInteger selectedTimes; + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/TimesPickerController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/TimesPickerController.m" new file mode 100644 index 00000000..268ce050 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/TimesPickerController.m" @@ -0,0 +1,39 @@ +// +// TimesPickerController.m +// iHabit +// +// Created by 陆钟豪 on 14/12/19. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import "TimesPickerController.h" + +@implementation TimesPickerController + +-(void)viewDidLoad { + [super viewDidLoad]; + NSLog(@"self.view.bounds.size.width:%f", self.view.bounds.size.width); + for(NSInteger i = 1; i <= 6; ++i) { + UIButton *timesButton = [UIButton buttonWithType:UIButtonTypeCustom]; + timesButton.frame = CGRectMake(0, 0, self.view.bounds.size.width / 2 / 6, self.view.bounds.size.height); // FIXME timesButton.frame = CGRectMake(0, 0, self.view.bounds.size.width / 6, self.view.bounds.size.height); + [timesButton setTitleColor:UIColor.blackColor forState:UIControlStateNormal]; + [timesButton setTitle:[NSString stringWithFormat:@"%ld", i] forState:UIControlStateNormal]; + timesButton.titleLabel.textColor = UIColor.blackColor; + timesButton.titleLabel.textAlignment = NSTextAlignmentCenter; + [timesButton addTarget:self action:@selector(selectCellView:) forControlEvents:UIControlEventTouchUpInside]; + + [self addCellView:timesButton]; + } + self.numberOfCellInRow = 6; + self.horizontalSpace = 0; + self.verticalSpace = 0; + [self layoutCellViews]; + [self selectCellViewWithIndex:0]; +} + +-(NSInteger)selectedTimes { + NSInteger selectedCellViewIndex = self.selectedCellViewIndex; + return selectedCellViewIndex + 1; +} + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/iHabitDB.xcdatamodeld/iHabitDB.xcdatamodel/contents" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/iHabitDB.xcdatamodeld/iHabitDB.xcdatamodel/contents" index d41532b3..10fb647f 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/iHabitDB.xcdatamodeld/iHabitDB.xcdatamodel/contents" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/iHabitDB.xcdatamodeld/iHabitDB.xcdatamodel/contents" @@ -25,8 +25,8 @@ - - - + + + \ No newline at end of file From 57828c3833ba6c51706539868591eff8b3b74f1f Mon Sep 17 00:00:00 2001 From: varvelworld Date: Sat, 20 Dec 2014 16:23:21 +0800 Subject: [PATCH 17/19] =?UTF-8?q?=E6=96=B0=E5=BB=BAHabit=E8=8A=82=E7=9B=AE?= =?UTF-8?q?=EF=BC=8Cback=E5=92=8Cadd=E6=8C=89=E9=92=AE=E5=8F=AF=E6=A0=B9?= =?UTF-8?q?=E6=8D=AEname=E6=98=AF=E5=90=A6=E4=B8=BA=E7=A9=BA=E5=8F=98?= =?UTF-8?q?=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iHabit/iHabit/AddHabitViewController.h" | 1 + .../iHabit/iHabit/AddHabitViewController.m" | 39 +++++++++++++------ .../iHabit/iHabit/AddHabitViewController.xib" | 3 ++ 3 files changed, 32 insertions(+), 11 deletions(-) diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.h" index 44798d93..9d691723 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.h" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.h" @@ -15,6 +15,7 @@ @property (weak, nonatomic) IBOutlet UIView *timesPicker; @property (weak, nonatomic) IBOutlet UIView *periodPicker; @property (weak, nonatomic) IBOutlet UIScrollView *scrollView; +@property (weak, nonatomic) UIButton *backButton; @end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.m" index c251e0c3..485808f9 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.m" @@ -42,7 +42,7 @@ - (void)viewDidLoad { titleLable.text = @"New Habit"; UIButton *backButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; - [backButton addTarget:self action:@selector(back:) forControlEvents:UIControlEventTouchUpInside]; + [backButton addTarget:self action:@selector(back:) forControlEvents:UIControlEventTouchUpInside]; // 绑定事件 backButton.frame = CGRectMake(240, 40, 60, 30); backButton.titleLabel.textAlignment = NSTextAlignmentCenter; backButton.titleLabel.font = [UIFont fontWithName:@"Raleway-Tracked" size:16]; @@ -79,19 +79,25 @@ - (void)viewDidLoad { [navigationBarView addSubview:titleLable]; [navigationBarView addSubview:backButton]; [self.view addSubview:navigationBarView]; + + _backButton = backButton; } --(IBAction)back:(id)sender { - CATransition *animation = [CATransition animation]; - animation.delegate = self; - animation.duration = 0.7; - animation.timingFunction = UIViewAnimationCurveEaseInOut; - animation.type = @"cube"; - animation.subtype = kCATransitionFromTop; - [[self.navigationController.view layer] addAnimation:animation forKey:@"animation"]; - [self.navigationController popViewControllerAnimated:NO]; +-(IBAction) habitTextFieldValueChanged:(id)sender { + UITextField *habitTextField = (UITextField *)sender; + if([@"" isEqualToString:habitTextField.text]){ + [_backButton setTitle:@"Back" forState:UIControlStateNormal]; + [_backButton addTarget:self action:@selector(back:) forControlEvents:UIControlEventTouchUpInside]; + [_backButton removeTarget:self action:@selector(addHabit:) forControlEvents:UIControlEventTouchUpInside]; + } + else { + [_backButton setTitle:@"Add" forState:UIControlStateNormal]; + [_backButton removeTarget:self action:@selector(back:) forControlEvents:UIControlEventTouchUpInside]; + [_backButton addTarget:self action:@selector(addHabit:) forControlEvents:UIControlEventTouchUpInside]; + } } + - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. @@ -101,7 +107,18 @@ - (IBAction)addHabit:(id)sender { [_habitBiz saveHabitWithTitle: self.habitTextField.text iconName: @"star" period:[_periodPickerController selectedPeriod] times: [NSNumber numberWithInteger:[_timesPickerController selectedTimes]]]; - [self.navigationController popViewControllerAnimated:YES]; + [self back:sender]; +} + +-(IBAction)back:(id)sender { + CATransition *animation = [CATransition animation]; + animation.delegate = self; + animation.duration = 0.7; + animation.timingFunction = UIViewAnimationCurveEaseInOut; + animation.type = @"cube"; + animation.subtype = kCATransitionFromTop; + [[self.navigationController.view layer] addAnimation:animation forKey:@"animation"]; + [self.navigationController popViewControllerAnimated:NO]; } @end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.xib" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.xib" index 7d6c713d..fab97ced 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.xib" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/AddHabitViewController.xib" @@ -42,6 +42,9 @@ + + + + + + + + + + + + @@ -94,6 +104,7 @@ + diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/GridPickerViewController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/GridPickerViewController.m" index 27bde973..72116fa6 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/GridPickerViewController.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/GridPickerViewController.m" @@ -7,6 +7,7 @@ // #import "GridPickerViewController.h" +#import @implementation GridPickerViewController { @@ -37,7 +38,8 @@ -(void)layoutCellViews{ for(UIView* view in _cellViews) { NSInteger numInRow = i % self.numberOfCellInRow; NSInteger row = i / self.numberOfCellInRow; - if(row > 1 && numInRow == 0) preRowFirstView = preView; + if(row >= 1 && numInRow == 0) + preRowFirstView = preView; CGFloat preCellRightX = numInRow == 0 ? 0 : preView.frame.origin.x + preView.frame.size.width; CGFloat preRowBottomY = row == 0 ? 0 : preRowFirstView.frame.origin.y + preRowFirstView.frame.size.height; CGRect frame = view.frame; @@ -50,8 +52,15 @@ -(void)layoutCellViews{ } -(void)selectCellView:(UIView*) cellView{ + UIView *selectedView = objc_getAssociatedObject(self, "selectedViewFrame"); [UIView animateWithDuration:0.2f animations:^{ - _selectedView.frame = cellView.frame; + if(selectedView == nil){ + _selectedView.frame = cellView.frame; + } + else { + _selectedView.frame = [cellView convertRect:selectedView.frame toView:self.view]; + NSLog(@"_selectedView.frame %f,%f,%f,%f", _selectedView.frame.origin.x, _selectedView.frame.origin.y, _selectedView.frame.size.width, _selectedView.frame.size.height); + } }]; _selectedCellView = cellView; } diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Habit.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Habit.m" index 47a8b39b..ad0d9a0a 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Habit.m" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Habit.m" @@ -35,6 +35,10 @@ +(NSDictionary*) iconColorDict { static NSDictionary* iconColorDict = nil; if(iconColorDict == nil) { iconColorDict = @{ + @"airplane" : UIColor.blueColor, + @"alarm" : UIColor.blueColor, + @"apple" : UIColor.redColor, + @"archive" : UIColor.redColor, @"star" : UIColor.yellowColor }; diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/IconPickerController.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/IconPickerController.h" new file mode 100644 index 00000000..85cc5634 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/IconPickerController.h" @@ -0,0 +1,15 @@ +// +// IconPickerController.h +// iHabit +// +// Created by 陆钟豪 on 14/12/20. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import "GridPickerViewController.h" + +@interface IconPickerController : GridPickerViewController + +@property (strong, readonly) NSString *selectedIconName; + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/IconPickerController.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/IconPickerController.m" new file mode 100644 index 00000000..e95effbb --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/IconPickerController.m" @@ -0,0 +1,78 @@ +// +// IconPickerController.m +// iHabit +// +// Created by 陆钟豪 on 14/12/20. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import "IconPickerController.h" +#import "Habit.h" +#import "Util.h" +#import + +@interface IconPickerController () + +@end + +@implementation IconPickerController + +- (void)viewDidLoad { + + [super viewDidLoad]; + NSDictionary* iconColorDict = [Habit iconColorDict]; + [iconColorDict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + NSString *iconName = (NSString *)key; + UIColor *iconColor = (UIColor *)obj; + // 设置图标 + UIImage *iconFileImage = [UIImage imageNamed:iconName]; + CGSize iconSize = iconFileImage.size; + UIGraphicsBeginImageContextWithOptions(iconSize, NO, 0.0); // That way, on a double-resolution screen, you'll get a double-resolution graphics context. 否则有锯齿,就是这样! + CGContextRef contextRef = UIGraphicsGetCurrentContext(); + [iconFileImage drawInRect:CGRectMake(0, 0, iconSize.width, iconSize.height)]; + CGContextSetBlendMode(contextRef, kCGBlendModeSourceIn); + CGContextSetFillColorWithColor(contextRef, iconColor.CGColor); + CGContextFillRect(contextRef, CGRectMake(0, 0, iconSize.width, iconSize.height)); + UIImage *iconImage = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + //UIImageView *iconImageView = [[UIImageView alloc] initWithImage:iconImage]; + UIButton *iconButton = [UIButton buttonWithType:UIButtonTypeCustom]; + iconButton.frame = CGRectInset(CGRectMake(0, 0, iconImage.size.width, iconImage.size.height), -10, -10); + UIView *selectedView = [[UIView alloc] initWithFrame:CGRectMake(10 - 3, 10 - 3, iconImage.size.width + 3 * 2, iconImage.size.height + 3 * 2)]; + [iconButton setImage:iconImage forState:UIControlStateNormal]; + [iconButton addTarget:self action:@selector(selectCellView:) forControlEvents:UIControlEventTouchUpInside]; + ActionBlock* actionBlock = [[ActionBlock alloc] initWith:^(id sender){ + _selectedIconName = iconName; + }]; + [iconButton addTarget:actionBlock action:@selector(action:) forControlEvents:UIControlEventTouchUpInside]; + objc_setAssociatedObject(self, "selectedViewFrame", selectedView, OBJC_ASSOCIATION_RETAIN_NONATOMIC);//runtime添加属性 哈哈 + [self addCellView:iconButton]; + [self addChildViewController:actionBlock];//button的target必须是contrlloer,坑 + }]; + self.numberOfCellInRow = 4; + self.horizontalSpace = 5; + self.verticalSpace = 5; + [self layoutCellViews]; + [self selectCellViewWithIndex:0]; +} + +-(void)action:(id) sender{ + NSLog(@"hello"); +}; + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Util.h" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Util.h" new file mode 100644 index 00000000..9061ee72 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Util.h" @@ -0,0 +1,23 @@ +// +// Util.h +// iHabit +// +// Created by 陆钟豪 on 14/12/22. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import +#import + +@interface ActionBlock : UIViewController + +-(instancetype)initWith:(void (^)(id sender))block; +-(void)action:(id) sender; + +@end + +@interface Util : NSObject + ++(id)blockActionWithBlock:(void (^)(id sender))block; + +@end diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Util.m" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Util.m" new file mode 100644 index 00000000..5c9a81e7 --- /dev/null +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Util.m" @@ -0,0 +1,33 @@ +// +// Util.m +// iHabit +// +// Created by 陆钟豪 on 14/12/22. +// Copyright (c) 2014年 lzh. All rights reserved. +// + +#import "Util.h" + +@implementation ActionBlock { + void (^_block)(id sender) ; +} + +-(instancetype)initWith:(void (^)(id sender))block { + self = [super init]; + _block = block; + return self; +} + +-(void)action:(id) sender{ + _block(sender); +}; + +@end + +@implementation Util + ++(id)blockActionWithBlock:(void (^)(id sender))block { + return [[ActionBlock alloc] initWith:block]; +}; + +@end From 264fedb22f44a02a4347e1b003428b0b9919a6fc Mon Sep 17 00:00:00 2001 From: varvelworld Date: Mon, 29 Dec 2014 15:21:34 +0800 Subject: [PATCH 19/19] add icon --- .../AppIcon.appiconset/Contents.json" | 3 ++- .../AppIcon.appiconset/icon@2x.png" | Bin 0 -> 3302 bytes 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 "yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/AppIcon.appiconset/icon@2x.png" diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/AppIcon.appiconset/Contents.json" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/AppIcon.appiconset/Contents.json" index 36d2c80d..c2616cab 100644 --- "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/AppIcon.appiconset/Contents.json" +++ "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/AppIcon.appiconset/Contents.json" @@ -21,8 +21,9 @@ "scale" : "3x" }, { - "idiom" : "iphone", "size" : "60x60", + "idiom" : "iphone", + "filename" : "icon@2x.png", "scale" : "2x" }, { diff --git "a/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/AppIcon.appiconset/icon@2x.png" "b/yxb144325061\351\231\206\351\222\237\350\261\252/iHabit/iHabit/Images.xcassets/AppIcon.appiconset/icon@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..1e58fd048c21f0999f1f97aeaca85c3066c050e2 GIT binary patch literal 3302 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 kT7FDm6WDxAVDmA7%}1N(U#)=v