├── CircleCollectionViewDemo.xcodeproj ├── .svn │ ├── entries │ └── text-base │ │ └── project.pbxproj.svn-base ├── project.pbxproj ├── project.xcworkspace │ ├── .svn │ │ ├── entries │ │ └── text-base │ │ │ └── contents.xcworkspacedata.svn-base │ ├── contents.xcworkspacedata │ └── xcuserdata │ │ └── soso.xcuserdatad │ │ └── UserInterfaceState.xcuserstate └── xcuserdata │ └── soso.xcuserdatad │ └── xcschemes │ └── xcschememanagement.plist ├── CircleCollectionViewDemo ├── .svn │ ├── entries │ └── text-base │ │ ├── AppDelegate.h.svn-base │ │ ├── AppDelegate.m.svn-base │ │ ├── CircularCollectionViewCell.h.svn-base │ │ ├── CircularCollectionViewCell.m.svn-base │ │ ├── CircularCollectionViewLayout.h.svn-base │ │ ├── CircularCollectionViewLayout.m.svn-base │ │ ├── Info.plist.svn-base │ │ ├── ViewController.h.svn-base │ │ ├── ViewController.m.svn-base │ │ └── main.m.svn-base ├── AppDelegate.h ├── AppDelegate.m ├── Assets.xcassets │ ├── .svn │ │ ├── entries │ │ └── text-base │ │ │ └── Contents.json.svn-base │ ├── AppIcon.appiconset │ │ ├── .svn │ │ │ ├── entries │ │ │ └── text-base │ │ │ │ └── Contents.json.svn-base │ │ └── Contents.json │ ├── Contents.json │ ├── bg-dark.imageset │ │ ├── .svn │ │ │ ├── entries │ │ │ ├── prop-base │ │ │ │ └── bg-dark.jpg.svn-base │ │ │ └── text-base │ │ │ │ ├── Contents.json.svn-base │ │ │ │ └── bg-dark.jpg.svn-base │ │ ├── Contents.json │ │ └── bg-dark.jpg │ ├── book_0.imageset │ │ ├── .svn │ │ │ ├── entries │ │ │ ├── prop-base │ │ │ │ └── swt@2x.png.svn-base │ │ │ └── text-base │ │ │ │ ├── Contents.json.svn-base │ │ │ │ └── swt@2x.png.svn-base │ │ ├── Contents.json │ │ └── swt@2x.png │ ├── book_1.imageset │ │ ├── .svn │ │ │ ├── entries │ │ │ ├── prop-base │ │ │ │ └── awt@2x.png.svn-base │ │ │ └── text-base │ │ │ │ ├── Contents.json.svn-base │ │ │ │ └── awt@2x.png.svn-base │ │ ├── Contents.json │ │ └── awt@2x.png │ ├── book_10.imageset │ │ ├── .svn │ │ │ ├── entries │ │ │ ├── prop-base │ │ │ │ └── iat@2x.png.svn-base │ │ │ └── text-base │ │ │ │ ├── Contents.json.svn-base │ │ │ │ └── iat@2x.png.svn-base │ │ ├── Contents.json │ │ └── iat@2x.png │ ├── book_11.imageset │ │ ├── .svn │ │ │ ├── entries │ │ │ ├── prop-base │ │ │ │ └── pgsk@2x.png.svn-base │ │ │ └── text-base │ │ │ │ ├── Contents.json.svn-base │ │ │ │ └── pgsk@2x.png.svn-base │ │ ├── Contents.json │ │ └── pgsk@2x.png │ ├── book_12.imageset │ │ ├── .svn │ │ │ ├── entries │ │ │ ├── prop-base │ │ │ │ └── sgsk@2x.png.svn-base │ │ │ └── text-base │ │ │ │ ├── Contents.json.svn-base │ │ │ │ └── sgsk@2x.png.svn-base │ │ ├── Contents.json │ │ └── sgsk@2x.png │ ├── book_13.imageset │ │ ├── .svn │ │ │ ├── entries │ │ │ ├── prop-base │ │ │ │ └── skt@2x.png.svn-base │ │ │ └── text-base │ │ │ │ ├── Contents.json.svn-base │ │ │ │ └── skt@2x.png.svn-base │ │ ├── Contents.json │ │ └── skt@2x.png │ ├── book_2.imageset │ │ ├── .svn │ │ │ ├── entries │ │ │ ├── prop-base │ │ │ │ └── bgsk@2x.png.svn-base │ │ │ └── text-base │ │ │ │ ├── Contents.json.svn-base │ │ │ │ └── bgsk@2x.png.svn-base │ │ ├── Contents.json │ │ └── bgsk@2x.png │ ├── book_3.imageset │ │ ├── .svn │ │ │ ├── entries │ │ │ ├── prop-base │ │ │ │ └── cdt@2x.png.svn-base │ │ │ └── text-base │ │ │ │ ├── Contents.json.svn-base │ │ │ │ └── cdt@2x.png.svn-base │ │ ├── Contents.json │ │ └── cdt@2x.png │ ├── book_4.imageset │ │ ├── .svn │ │ │ ├── entries │ │ │ ├── prop-base │ │ │ │ └── i5t@2x.png.svn-base │ │ │ └── text-base │ │ │ │ ├── Contents.json.svn-base │ │ │ │ └── i5t@2x.png.svn-base │ │ ├── Contents.json │ │ └── i5t@2x.png │ ├── book_5.imageset │ │ ├── .svn │ │ │ ├── entries │ │ │ ├── prop-base │ │ │ │ └── i6t@2x.png.svn-base │ │ │ └── text-base │ │ │ │ ├── Contents.json.svn-base │ │ │ │ └── i6t@2x.png.svn-base │ │ ├── Contents.json │ │ └── i6t@2x.png │ ├── book_6.imageset │ │ ├── .svn │ │ │ ├── entries │ │ │ ├── prop-base │ │ │ │ └── i6tc@2x.png.svn-base │ │ │ └── text-base │ │ │ │ ├── Contents.json.svn-base │ │ │ │ └── i6tc@2x.png.svn-base │ │ ├── Contents.json │ │ └── i6tc@2x.png │ ├── book_7.imageset │ │ ├── .svn │ │ │ ├── entries │ │ │ ├── prop-base │ │ │ │ └── i7t@2x.png.svn-base │ │ │ └── text-base │ │ │ │ ├── Contents.json.svn-base │ │ │ │ └── i7t@2x.png.svn-base │ │ ├── Contents.json │ │ └── i7t@2x.png │ ├── book_8.imageset │ │ ├── .svn │ │ │ ├── entries │ │ │ ├── prop-base │ │ │ │ └── i8T@2x.png.svn-base │ │ │ └── text-base │ │ │ │ ├── Contents.json.svn-base │ │ │ │ └── i8T@2x.png.svn-base │ │ ├── Contents.json │ │ └── i8T@2x.png │ └── book_9.imageset │ │ ├── .svn │ │ ├── entries │ │ ├── prop-base │ │ │ └── ia1234@2x.png.svn-base │ │ └── text-base │ │ │ ├── Contents.json.svn-base │ │ │ └── ia1234@2x.png.svn-base │ │ ├── Contents.json │ │ └── ia1234@2x.png ├── Base.lproj │ ├── .svn │ │ ├── entries │ │ └── text-base │ │ │ ├── LaunchScreen.storyboard.svn-base │ │ │ └── Main.storyboard.svn-base │ ├── LaunchScreen.storyboard │ └── Main.storyboard ├── CircularCollectionViewCell.h ├── CircularCollectionViewCell.m ├── CircularCollectionViewLayout.h ├── CircularCollectionViewLayout.m ├── Info.plist ├── ViewController.h ├── ViewController.m └── main.m ├── CircleCollectionViewDemoTests ├── .svn │ ├── entries │ └── text-base │ │ ├── CircleCollectionViewDemoTests.m.svn-base │ │ └── Info.plist.svn-base ├── CircleCollectionViewDemoTests.m └── Info.plist ├── CircleCollectionViewDemoUITests ├── .svn │ ├── entries │ └── text-base │ │ ├── CircleCollectionViewDemoUITests.m.svn-base │ │ └── Info.plist.svn-base ├── CircleCollectionViewDemoUITests.m └── Info.plist └── README.md /CircleCollectionViewDemo.xcodeproj/.svn/entries: -------------------------------------------------------------------------------- 1 | 10 2 | 3 | dir 4 | 983 5 | svn://zcb@svn.gz.com/guan-ios/branches/guan_release_20170512/guan/demo/CircleCollectionViewDemo/CircleCollectionViewDemo.xcodeproj 6 | svn://zcb@svn.gz.com/guan-ios 7 | 8 | 9 | 10 | 2018-03-03T03:39:51.461201Z 11 | 983 12 | hs 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | de11836a-f25c-4d35-a695-785a51a4a29f 28 | 29 | project.pbxproj 30 | file 31 | 32 | 33 | 34 | 35 | 2018-03-03T03:40:41.000000Z 36 | c0e25dc468079f5993e922ecfafd56c1 37 | 2018-03-03T03:39:51.461201Z 38 | 983 39 | hs 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 24041 62 | 63 | project.xcworkspace 64 | dir 65 | 66 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo.xcodeproj/.svn/text-base/project.pbxproj.svn-base: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 48; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | B1EE2786203026A6004D707D /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = B1EE2785203026A6004D707D /* AppDelegate.m */; }; 11 | B1EE2789203026A6004D707D /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B1EE2788203026A6004D707D /* ViewController.m */; }; 12 | B1EE278C203026A6004D707D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B1EE278A203026A6004D707D /* Main.storyboard */; }; 13 | B1EE278E203026A6004D707D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B1EE278D203026A6004D707D /* Assets.xcassets */; }; 14 | B1EE2791203026A6004D707D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B1EE278F203026A6004D707D /* LaunchScreen.storyboard */; }; 15 | B1EE2794203026A6004D707D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = B1EE2793203026A6004D707D /* main.m */; }; 16 | B1EE279E203026A6004D707D /* CircleCollectionViewDemoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = B1EE279D203026A6004D707D /* CircleCollectionViewDemoTests.m */; }; 17 | B1EE27A9203026A7004D707D /* CircleCollectionViewDemoUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = B1EE27A8203026A7004D707D /* CircleCollectionViewDemoUITests.m */; }; 18 | B1EE27B820303384004D707D /* CircularCollectionViewLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = B1EE27B720303384004D707D /* CircularCollectionViewLayout.m */; }; 19 | B1EE27BB20303EB4004D707D /* CircularCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = B1EE27BA20303EB4004D707D /* CircularCollectionViewCell.m */; }; 20 | /* End PBXBuildFile section */ 21 | 22 | /* Begin PBXContainerItemProxy section */ 23 | B1EE279A203026A6004D707D /* PBXContainerItemProxy */ = { 24 | isa = PBXContainerItemProxy; 25 | containerPortal = B1EE2779203026A6004D707D /* Project object */; 26 | proxyType = 1; 27 | remoteGlobalIDString = B1EE2780203026A6004D707D; 28 | remoteInfo = CircleCollectionViewDemo; 29 | }; 30 | B1EE27A5203026A7004D707D /* PBXContainerItemProxy */ = { 31 | isa = PBXContainerItemProxy; 32 | containerPortal = B1EE2779203026A6004D707D /* Project object */; 33 | proxyType = 1; 34 | remoteGlobalIDString = B1EE2780203026A6004D707D; 35 | remoteInfo = CircleCollectionViewDemo; 36 | }; 37 | /* End PBXContainerItemProxy section */ 38 | 39 | /* Begin PBXFileReference section */ 40 | B1EE2781203026A6004D707D /* CircleCollectionViewDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CircleCollectionViewDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 41 | B1EE2784203026A6004D707D /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 42 | B1EE2785203026A6004D707D /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 43 | B1EE2787203026A6004D707D /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; 44 | B1EE2788203026A6004D707D /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; 45 | B1EE278B203026A6004D707D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 46 | B1EE278D203026A6004D707D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 47 | B1EE2790203026A6004D707D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 48 | B1EE2792203026A6004D707D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 49 | B1EE2793203026A6004D707D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 50 | B1EE2799203026A6004D707D /* CircleCollectionViewDemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CircleCollectionViewDemoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 51 | B1EE279D203026A6004D707D /* CircleCollectionViewDemoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CircleCollectionViewDemoTests.m; sourceTree = ""; }; 52 | B1EE279F203026A6004D707D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 53 | B1EE27A4203026A7004D707D /* CircleCollectionViewDemoUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CircleCollectionViewDemoUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 54 | B1EE27A8203026A7004D707D /* CircleCollectionViewDemoUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CircleCollectionViewDemoUITests.m; sourceTree = ""; }; 55 | B1EE27AA203026A7004D707D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 56 | B1EE27B620303384004D707D /* CircularCollectionViewLayout.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CircularCollectionViewLayout.h; sourceTree = ""; }; 57 | B1EE27B720303384004D707D /* CircularCollectionViewLayout.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CircularCollectionViewLayout.m; sourceTree = ""; }; 58 | B1EE27B920303EB4004D707D /* CircularCollectionViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CircularCollectionViewCell.h; sourceTree = ""; }; 59 | B1EE27BA20303EB4004D707D /* CircularCollectionViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CircularCollectionViewCell.m; sourceTree = ""; }; 60 | /* End PBXFileReference section */ 61 | 62 | /* Begin PBXFrameworksBuildPhase section */ 63 | B1EE277E203026A6004D707D /* Frameworks */ = { 64 | isa = PBXFrameworksBuildPhase; 65 | buildActionMask = 2147483647; 66 | files = ( 67 | ); 68 | runOnlyForDeploymentPostprocessing = 0; 69 | }; 70 | B1EE2796203026A6004D707D /* Frameworks */ = { 71 | isa = PBXFrameworksBuildPhase; 72 | buildActionMask = 2147483647; 73 | files = ( 74 | ); 75 | runOnlyForDeploymentPostprocessing = 0; 76 | }; 77 | B1EE27A1203026A7004D707D /* Frameworks */ = { 78 | isa = PBXFrameworksBuildPhase; 79 | buildActionMask = 2147483647; 80 | files = ( 81 | ); 82 | runOnlyForDeploymentPostprocessing = 0; 83 | }; 84 | /* End PBXFrameworksBuildPhase section */ 85 | 86 | /* Begin PBXGroup section */ 87 | B1EE2778203026A6004D707D = { 88 | isa = PBXGroup; 89 | children = ( 90 | B1EE2783203026A6004D707D /* CircleCollectionViewDemo */, 91 | B1EE279C203026A6004D707D /* CircleCollectionViewDemoTests */, 92 | B1EE27A7203026A7004D707D /* CircleCollectionViewDemoUITests */, 93 | B1EE2782203026A6004D707D /* Products */, 94 | ); 95 | sourceTree = ""; 96 | }; 97 | B1EE2782203026A6004D707D /* Products */ = { 98 | isa = PBXGroup; 99 | children = ( 100 | B1EE2781203026A6004D707D /* CircleCollectionViewDemo.app */, 101 | B1EE2799203026A6004D707D /* CircleCollectionViewDemoTests.xctest */, 102 | B1EE27A4203026A7004D707D /* CircleCollectionViewDemoUITests.xctest */, 103 | ); 104 | name = Products; 105 | sourceTree = ""; 106 | }; 107 | B1EE2783203026A6004D707D /* CircleCollectionViewDemo */ = { 108 | isa = PBXGroup; 109 | children = ( 110 | B1EE2784203026A6004D707D /* AppDelegate.h */, 111 | B1EE2785203026A6004D707D /* AppDelegate.m */, 112 | B1EE2787203026A6004D707D /* ViewController.h */, 113 | B1EE2788203026A6004D707D /* ViewController.m */, 114 | B1EE278A203026A6004D707D /* Main.storyboard */, 115 | B1EE278D203026A6004D707D /* Assets.xcassets */, 116 | B1EE278F203026A6004D707D /* LaunchScreen.storyboard */, 117 | B1EE2792203026A6004D707D /* Info.plist */, 118 | B1EE2793203026A6004D707D /* main.m */, 119 | B1EE27B620303384004D707D /* CircularCollectionViewLayout.h */, 120 | B1EE27B720303384004D707D /* CircularCollectionViewLayout.m */, 121 | B1EE27B920303EB4004D707D /* CircularCollectionViewCell.h */, 122 | B1EE27BA20303EB4004D707D /* CircularCollectionViewCell.m */, 123 | ); 124 | path = CircleCollectionViewDemo; 125 | sourceTree = ""; 126 | }; 127 | B1EE279C203026A6004D707D /* CircleCollectionViewDemoTests */ = { 128 | isa = PBXGroup; 129 | children = ( 130 | B1EE279D203026A6004D707D /* CircleCollectionViewDemoTests.m */, 131 | B1EE279F203026A6004D707D /* Info.plist */, 132 | ); 133 | path = CircleCollectionViewDemoTests; 134 | sourceTree = ""; 135 | }; 136 | B1EE27A7203026A7004D707D /* CircleCollectionViewDemoUITests */ = { 137 | isa = PBXGroup; 138 | children = ( 139 | B1EE27A8203026A7004D707D /* CircleCollectionViewDemoUITests.m */, 140 | B1EE27AA203026A7004D707D /* Info.plist */, 141 | ); 142 | path = CircleCollectionViewDemoUITests; 143 | sourceTree = ""; 144 | }; 145 | /* End PBXGroup section */ 146 | 147 | /* Begin PBXNativeTarget section */ 148 | B1EE2780203026A6004D707D /* CircleCollectionViewDemo */ = { 149 | isa = PBXNativeTarget; 150 | buildConfigurationList = B1EE27AD203026A7004D707D /* Build configuration list for PBXNativeTarget "CircleCollectionViewDemo" */; 151 | buildPhases = ( 152 | B1EE277D203026A6004D707D /* Sources */, 153 | B1EE277E203026A6004D707D /* Frameworks */, 154 | B1EE277F203026A6004D707D /* Resources */, 155 | ); 156 | buildRules = ( 157 | ); 158 | dependencies = ( 159 | ); 160 | name = CircleCollectionViewDemo; 161 | productName = CircleCollectionViewDemo; 162 | productReference = B1EE2781203026A6004D707D /* CircleCollectionViewDemo.app */; 163 | productType = "com.apple.product-type.application"; 164 | }; 165 | B1EE2798203026A6004D707D /* CircleCollectionViewDemoTests */ = { 166 | isa = PBXNativeTarget; 167 | buildConfigurationList = B1EE27B0203026A7004D707D /* Build configuration list for PBXNativeTarget "CircleCollectionViewDemoTests" */; 168 | buildPhases = ( 169 | B1EE2795203026A6004D707D /* Sources */, 170 | B1EE2796203026A6004D707D /* Frameworks */, 171 | B1EE2797203026A6004D707D /* Resources */, 172 | ); 173 | buildRules = ( 174 | ); 175 | dependencies = ( 176 | B1EE279B203026A6004D707D /* PBXTargetDependency */, 177 | ); 178 | name = CircleCollectionViewDemoTests; 179 | productName = CircleCollectionViewDemoTests; 180 | productReference = B1EE2799203026A6004D707D /* CircleCollectionViewDemoTests.xctest */; 181 | productType = "com.apple.product-type.bundle.unit-test"; 182 | }; 183 | B1EE27A3203026A7004D707D /* CircleCollectionViewDemoUITests */ = { 184 | isa = PBXNativeTarget; 185 | buildConfigurationList = B1EE27B3203026A7004D707D /* Build configuration list for PBXNativeTarget "CircleCollectionViewDemoUITests" */; 186 | buildPhases = ( 187 | B1EE27A0203026A7004D707D /* Sources */, 188 | B1EE27A1203026A7004D707D /* Frameworks */, 189 | B1EE27A2203026A7004D707D /* Resources */, 190 | ); 191 | buildRules = ( 192 | ); 193 | dependencies = ( 194 | B1EE27A6203026A7004D707D /* PBXTargetDependency */, 195 | ); 196 | name = CircleCollectionViewDemoUITests; 197 | productName = CircleCollectionViewDemoUITests; 198 | productReference = B1EE27A4203026A7004D707D /* CircleCollectionViewDemoUITests.xctest */; 199 | productType = "com.apple.product-type.bundle.ui-testing"; 200 | }; 201 | /* End PBXNativeTarget section */ 202 | 203 | /* Begin PBXProject section */ 204 | B1EE2779203026A6004D707D /* Project object */ = { 205 | isa = PBXProject; 206 | attributes = { 207 | LastUpgradeCheck = 0900; 208 | ORGANIZATIONNAME = "GZ GZ"; 209 | TargetAttributes = { 210 | B1EE2780203026A6004D707D = { 211 | CreatedOnToolsVersion = 9.0; 212 | ProvisioningStyle = Automatic; 213 | }; 214 | B1EE2798203026A6004D707D = { 215 | CreatedOnToolsVersion = 9.0; 216 | ProvisioningStyle = Automatic; 217 | TestTargetID = B1EE2780203026A6004D707D; 218 | }; 219 | B1EE27A3203026A7004D707D = { 220 | CreatedOnToolsVersion = 9.0; 221 | ProvisioningStyle = Automatic; 222 | TestTargetID = B1EE2780203026A6004D707D; 223 | }; 224 | }; 225 | }; 226 | buildConfigurationList = B1EE277C203026A6004D707D /* Build configuration list for PBXProject "CircleCollectionViewDemo" */; 227 | compatibilityVersion = "Xcode 8.0"; 228 | developmentRegion = en; 229 | hasScannedForEncodings = 0; 230 | knownRegions = ( 231 | en, 232 | Base, 233 | ); 234 | mainGroup = B1EE2778203026A6004D707D; 235 | productRefGroup = B1EE2782203026A6004D707D /* Products */; 236 | projectDirPath = ""; 237 | projectRoot = ""; 238 | targets = ( 239 | B1EE2780203026A6004D707D /* CircleCollectionViewDemo */, 240 | B1EE2798203026A6004D707D /* CircleCollectionViewDemoTests */, 241 | B1EE27A3203026A7004D707D /* CircleCollectionViewDemoUITests */, 242 | ); 243 | }; 244 | /* End PBXProject section */ 245 | 246 | /* Begin PBXResourcesBuildPhase section */ 247 | B1EE277F203026A6004D707D /* Resources */ = { 248 | isa = PBXResourcesBuildPhase; 249 | buildActionMask = 2147483647; 250 | files = ( 251 | B1EE2791203026A6004D707D /* LaunchScreen.storyboard in Resources */, 252 | B1EE278E203026A6004D707D /* Assets.xcassets in Resources */, 253 | B1EE278C203026A6004D707D /* Main.storyboard in Resources */, 254 | ); 255 | runOnlyForDeploymentPostprocessing = 0; 256 | }; 257 | B1EE2797203026A6004D707D /* Resources */ = { 258 | isa = PBXResourcesBuildPhase; 259 | buildActionMask = 2147483647; 260 | files = ( 261 | ); 262 | runOnlyForDeploymentPostprocessing = 0; 263 | }; 264 | B1EE27A2203026A7004D707D /* Resources */ = { 265 | isa = PBXResourcesBuildPhase; 266 | buildActionMask = 2147483647; 267 | files = ( 268 | ); 269 | runOnlyForDeploymentPostprocessing = 0; 270 | }; 271 | /* End PBXResourcesBuildPhase section */ 272 | 273 | /* Begin PBXSourcesBuildPhase section */ 274 | B1EE277D203026A6004D707D /* Sources */ = { 275 | isa = PBXSourcesBuildPhase; 276 | buildActionMask = 2147483647; 277 | files = ( 278 | B1EE2789203026A6004D707D /* ViewController.m in Sources */, 279 | B1EE2794203026A6004D707D /* main.m in Sources */, 280 | B1EE2786203026A6004D707D /* AppDelegate.m in Sources */, 281 | B1EE27BB20303EB4004D707D /* CircularCollectionViewCell.m in Sources */, 282 | B1EE27B820303384004D707D /* CircularCollectionViewLayout.m in Sources */, 283 | ); 284 | runOnlyForDeploymentPostprocessing = 0; 285 | }; 286 | B1EE2795203026A6004D707D /* Sources */ = { 287 | isa = PBXSourcesBuildPhase; 288 | buildActionMask = 2147483647; 289 | files = ( 290 | B1EE279E203026A6004D707D /* CircleCollectionViewDemoTests.m in Sources */, 291 | ); 292 | runOnlyForDeploymentPostprocessing = 0; 293 | }; 294 | B1EE27A0203026A7004D707D /* Sources */ = { 295 | isa = PBXSourcesBuildPhase; 296 | buildActionMask = 2147483647; 297 | files = ( 298 | B1EE27A9203026A7004D707D /* CircleCollectionViewDemoUITests.m in Sources */, 299 | ); 300 | runOnlyForDeploymentPostprocessing = 0; 301 | }; 302 | /* End PBXSourcesBuildPhase section */ 303 | 304 | /* Begin PBXTargetDependency section */ 305 | B1EE279B203026A6004D707D /* PBXTargetDependency */ = { 306 | isa = PBXTargetDependency; 307 | target = B1EE2780203026A6004D707D /* CircleCollectionViewDemo */; 308 | targetProxy = B1EE279A203026A6004D707D /* PBXContainerItemProxy */; 309 | }; 310 | B1EE27A6203026A7004D707D /* PBXTargetDependency */ = { 311 | isa = PBXTargetDependency; 312 | target = B1EE2780203026A6004D707D /* CircleCollectionViewDemo */; 313 | targetProxy = B1EE27A5203026A7004D707D /* PBXContainerItemProxy */; 314 | }; 315 | /* End PBXTargetDependency section */ 316 | 317 | /* Begin PBXVariantGroup section */ 318 | B1EE278A203026A6004D707D /* Main.storyboard */ = { 319 | isa = PBXVariantGroup; 320 | children = ( 321 | B1EE278B203026A6004D707D /* Base */, 322 | ); 323 | name = Main.storyboard; 324 | sourceTree = ""; 325 | }; 326 | B1EE278F203026A6004D707D /* LaunchScreen.storyboard */ = { 327 | isa = PBXVariantGroup; 328 | children = ( 329 | B1EE2790203026A6004D707D /* Base */, 330 | ); 331 | name = LaunchScreen.storyboard; 332 | sourceTree = ""; 333 | }; 334 | /* End PBXVariantGroup section */ 335 | 336 | /* Begin XCBuildConfiguration section */ 337 | B1EE27AB203026A7004D707D /* Debug */ = { 338 | isa = XCBuildConfiguration; 339 | buildSettings = { 340 | ALWAYS_SEARCH_USER_PATHS = NO; 341 | CLANG_ANALYZER_NONNULL = YES; 342 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 343 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 344 | CLANG_CXX_LIBRARY = "libc++"; 345 | CLANG_ENABLE_MODULES = YES; 346 | CLANG_ENABLE_OBJC_ARC = YES; 347 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 348 | CLANG_WARN_BOOL_CONVERSION = YES; 349 | CLANG_WARN_COMMA = YES; 350 | CLANG_WARN_CONSTANT_CONVERSION = YES; 351 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 352 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 353 | CLANG_WARN_EMPTY_BODY = YES; 354 | CLANG_WARN_ENUM_CONVERSION = YES; 355 | CLANG_WARN_INFINITE_RECURSION = YES; 356 | CLANG_WARN_INT_CONVERSION = YES; 357 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 358 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 359 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 360 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 361 | CLANG_WARN_STRICT_PROTOTYPES = YES; 362 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 363 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 364 | CLANG_WARN_UNREACHABLE_CODE = YES; 365 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 366 | CODE_SIGN_IDENTITY = "iPhone Developer"; 367 | COPY_PHASE_STRIP = NO; 368 | DEBUG_INFORMATION_FORMAT = dwarf; 369 | ENABLE_STRICT_OBJC_MSGSEND = YES; 370 | ENABLE_TESTABILITY = YES; 371 | GCC_C_LANGUAGE_STANDARD = gnu11; 372 | GCC_DYNAMIC_NO_PIC = NO; 373 | GCC_NO_COMMON_BLOCKS = YES; 374 | GCC_OPTIMIZATION_LEVEL = 0; 375 | GCC_PREPROCESSOR_DEFINITIONS = ( 376 | "DEBUG=1", 377 | "$(inherited)", 378 | ); 379 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 380 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 381 | GCC_WARN_UNDECLARED_SELECTOR = YES; 382 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 383 | GCC_WARN_UNUSED_FUNCTION = YES; 384 | GCC_WARN_UNUSED_VARIABLE = YES; 385 | IPHONEOS_DEPLOYMENT_TARGET = 11.0; 386 | MTL_ENABLE_DEBUG_INFO = YES; 387 | ONLY_ACTIVE_ARCH = YES; 388 | SDKROOT = iphoneos; 389 | }; 390 | name = Debug; 391 | }; 392 | B1EE27AC203026A7004D707D /* Release */ = { 393 | isa = XCBuildConfiguration; 394 | buildSettings = { 395 | ALWAYS_SEARCH_USER_PATHS = NO; 396 | CLANG_ANALYZER_NONNULL = YES; 397 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 398 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 399 | CLANG_CXX_LIBRARY = "libc++"; 400 | CLANG_ENABLE_MODULES = YES; 401 | CLANG_ENABLE_OBJC_ARC = YES; 402 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 403 | CLANG_WARN_BOOL_CONVERSION = YES; 404 | CLANG_WARN_COMMA = YES; 405 | CLANG_WARN_CONSTANT_CONVERSION = YES; 406 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 407 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 408 | CLANG_WARN_EMPTY_BODY = YES; 409 | CLANG_WARN_ENUM_CONVERSION = YES; 410 | CLANG_WARN_INFINITE_RECURSION = YES; 411 | CLANG_WARN_INT_CONVERSION = YES; 412 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 413 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 414 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 415 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 416 | CLANG_WARN_STRICT_PROTOTYPES = YES; 417 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 418 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 419 | CLANG_WARN_UNREACHABLE_CODE = YES; 420 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 421 | CODE_SIGN_IDENTITY = "iPhone Developer"; 422 | COPY_PHASE_STRIP = NO; 423 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 424 | ENABLE_NS_ASSERTIONS = NO; 425 | ENABLE_STRICT_OBJC_MSGSEND = YES; 426 | GCC_C_LANGUAGE_STANDARD = gnu11; 427 | GCC_NO_COMMON_BLOCKS = YES; 428 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 429 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 430 | GCC_WARN_UNDECLARED_SELECTOR = YES; 431 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 432 | GCC_WARN_UNUSED_FUNCTION = YES; 433 | GCC_WARN_UNUSED_VARIABLE = YES; 434 | IPHONEOS_DEPLOYMENT_TARGET = 11.0; 435 | MTL_ENABLE_DEBUG_INFO = NO; 436 | SDKROOT = iphoneos; 437 | VALIDATE_PRODUCT = YES; 438 | }; 439 | name = Release; 440 | }; 441 | B1EE27AE203026A7004D707D /* Debug */ = { 442 | isa = XCBuildConfiguration; 443 | buildSettings = { 444 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 445 | CODE_SIGN_STYLE = Automatic; 446 | INFOPLIST_FILE = CircleCollectionViewDemo/Info.plist; 447 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 448 | PRODUCT_BUNDLE_IDENTIFIER = GZ.com.CircleCollectionViewDemo; 449 | PRODUCT_NAME = "$(TARGET_NAME)"; 450 | TARGETED_DEVICE_FAMILY = "1,2"; 451 | }; 452 | name = Debug; 453 | }; 454 | B1EE27AF203026A7004D707D /* Release */ = { 455 | isa = XCBuildConfiguration; 456 | buildSettings = { 457 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 458 | CODE_SIGN_STYLE = Automatic; 459 | INFOPLIST_FILE = CircleCollectionViewDemo/Info.plist; 460 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 461 | PRODUCT_BUNDLE_IDENTIFIER = GZ.com.CircleCollectionViewDemo; 462 | PRODUCT_NAME = "$(TARGET_NAME)"; 463 | TARGETED_DEVICE_FAMILY = "1,2"; 464 | }; 465 | name = Release; 466 | }; 467 | B1EE27B1203026A7004D707D /* Debug */ = { 468 | isa = XCBuildConfiguration; 469 | buildSettings = { 470 | BUNDLE_LOADER = "$(TEST_HOST)"; 471 | CODE_SIGN_STYLE = Automatic; 472 | INFOPLIST_FILE = CircleCollectionViewDemoTests/Info.plist; 473 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 474 | PRODUCT_BUNDLE_IDENTIFIER = GZ.com.CircleCollectionViewDemoTests; 475 | PRODUCT_NAME = "$(TARGET_NAME)"; 476 | TARGETED_DEVICE_FAMILY = "1,2"; 477 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/CircleCollectionViewDemo.app/CircleCollectionViewDemo"; 478 | }; 479 | name = Debug; 480 | }; 481 | B1EE27B2203026A7004D707D /* Release */ = { 482 | isa = XCBuildConfiguration; 483 | buildSettings = { 484 | BUNDLE_LOADER = "$(TEST_HOST)"; 485 | CODE_SIGN_STYLE = Automatic; 486 | INFOPLIST_FILE = CircleCollectionViewDemoTests/Info.plist; 487 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 488 | PRODUCT_BUNDLE_IDENTIFIER = GZ.com.CircleCollectionViewDemoTests; 489 | PRODUCT_NAME = "$(TARGET_NAME)"; 490 | TARGETED_DEVICE_FAMILY = "1,2"; 491 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/CircleCollectionViewDemo.app/CircleCollectionViewDemo"; 492 | }; 493 | name = Release; 494 | }; 495 | B1EE27B4203026A7004D707D /* Debug */ = { 496 | isa = XCBuildConfiguration; 497 | buildSettings = { 498 | CODE_SIGN_STYLE = Automatic; 499 | INFOPLIST_FILE = CircleCollectionViewDemoUITests/Info.plist; 500 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 501 | PRODUCT_BUNDLE_IDENTIFIER = GZ.com.CircleCollectionViewDemoUITests; 502 | PRODUCT_NAME = "$(TARGET_NAME)"; 503 | TARGETED_DEVICE_FAMILY = "1,2"; 504 | TEST_TARGET_NAME = CircleCollectionViewDemo; 505 | }; 506 | name = Debug; 507 | }; 508 | B1EE27B5203026A7004D707D /* Release */ = { 509 | isa = XCBuildConfiguration; 510 | buildSettings = { 511 | CODE_SIGN_STYLE = Automatic; 512 | INFOPLIST_FILE = CircleCollectionViewDemoUITests/Info.plist; 513 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 514 | PRODUCT_BUNDLE_IDENTIFIER = GZ.com.CircleCollectionViewDemoUITests; 515 | PRODUCT_NAME = "$(TARGET_NAME)"; 516 | TARGETED_DEVICE_FAMILY = "1,2"; 517 | TEST_TARGET_NAME = CircleCollectionViewDemo; 518 | }; 519 | name = Release; 520 | }; 521 | /* End XCBuildConfiguration section */ 522 | 523 | /* Begin XCConfigurationList section */ 524 | B1EE277C203026A6004D707D /* Build configuration list for PBXProject "CircleCollectionViewDemo" */ = { 525 | isa = XCConfigurationList; 526 | buildConfigurations = ( 527 | B1EE27AB203026A7004D707D /* Debug */, 528 | B1EE27AC203026A7004D707D /* Release */, 529 | ); 530 | defaultConfigurationIsVisible = 0; 531 | defaultConfigurationName = Release; 532 | }; 533 | B1EE27AD203026A7004D707D /* Build configuration list for PBXNativeTarget "CircleCollectionViewDemo" */ = { 534 | isa = XCConfigurationList; 535 | buildConfigurations = ( 536 | B1EE27AE203026A7004D707D /* Debug */, 537 | B1EE27AF203026A7004D707D /* Release */, 538 | ); 539 | defaultConfigurationIsVisible = 0; 540 | defaultConfigurationName = Release; 541 | }; 542 | B1EE27B0203026A7004D707D /* Build configuration list for PBXNativeTarget "CircleCollectionViewDemoTests" */ = { 543 | isa = XCConfigurationList; 544 | buildConfigurations = ( 545 | B1EE27B1203026A7004D707D /* Debug */, 546 | B1EE27B2203026A7004D707D /* Release */, 547 | ); 548 | defaultConfigurationIsVisible = 0; 549 | defaultConfigurationName = Release; 550 | }; 551 | B1EE27B3203026A7004D707D /* Build configuration list for PBXNativeTarget "CircleCollectionViewDemoUITests" */ = { 552 | isa = XCConfigurationList; 553 | buildConfigurations = ( 554 | B1EE27B4203026A7004D707D /* Debug */, 555 | B1EE27B5203026A7004D707D /* Release */, 556 | ); 557 | defaultConfigurationIsVisible = 0; 558 | defaultConfigurationName = Release; 559 | }; 560 | /* End XCConfigurationList section */ 561 | }; 562 | rootObject = B1EE2779203026A6004D707D /* Project object */; 563 | } 564 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 48; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | B1EE2786203026A6004D707D /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = B1EE2785203026A6004D707D /* AppDelegate.m */; }; 11 | B1EE2789203026A6004D707D /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B1EE2788203026A6004D707D /* ViewController.m */; }; 12 | B1EE278C203026A6004D707D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B1EE278A203026A6004D707D /* Main.storyboard */; }; 13 | B1EE278E203026A6004D707D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B1EE278D203026A6004D707D /* Assets.xcassets */; }; 14 | B1EE2791203026A6004D707D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B1EE278F203026A6004D707D /* LaunchScreen.storyboard */; }; 15 | B1EE2794203026A6004D707D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = B1EE2793203026A6004D707D /* main.m */; }; 16 | B1EE279E203026A6004D707D /* CircleCollectionViewDemoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = B1EE279D203026A6004D707D /* CircleCollectionViewDemoTests.m */; }; 17 | B1EE27A9203026A7004D707D /* CircleCollectionViewDemoUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = B1EE27A8203026A7004D707D /* CircleCollectionViewDemoUITests.m */; }; 18 | B1EE27B820303384004D707D /* CircularCollectionViewLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = B1EE27B720303384004D707D /* CircularCollectionViewLayout.m */; }; 19 | B1EE27BB20303EB4004D707D /* CircularCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = B1EE27BA20303EB4004D707D /* CircularCollectionViewCell.m */; }; 20 | /* End PBXBuildFile section */ 21 | 22 | /* Begin PBXContainerItemProxy section */ 23 | B1EE279A203026A6004D707D /* PBXContainerItemProxy */ = { 24 | isa = PBXContainerItemProxy; 25 | containerPortal = B1EE2779203026A6004D707D /* Project object */; 26 | proxyType = 1; 27 | remoteGlobalIDString = B1EE2780203026A6004D707D; 28 | remoteInfo = CircleCollectionViewDemo; 29 | }; 30 | B1EE27A5203026A7004D707D /* PBXContainerItemProxy */ = { 31 | isa = PBXContainerItemProxy; 32 | containerPortal = B1EE2779203026A6004D707D /* Project object */; 33 | proxyType = 1; 34 | remoteGlobalIDString = B1EE2780203026A6004D707D; 35 | remoteInfo = CircleCollectionViewDemo; 36 | }; 37 | /* End PBXContainerItemProxy section */ 38 | 39 | /* Begin PBXFileReference section */ 40 | B1EE2781203026A6004D707D /* CircleCollectionViewDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CircleCollectionViewDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 41 | B1EE2784203026A6004D707D /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 42 | B1EE2785203026A6004D707D /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 43 | B1EE2787203026A6004D707D /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; 44 | B1EE2788203026A6004D707D /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; 45 | B1EE278B203026A6004D707D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 46 | B1EE278D203026A6004D707D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 47 | B1EE2790203026A6004D707D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 48 | B1EE2792203026A6004D707D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 49 | B1EE2793203026A6004D707D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 50 | B1EE2799203026A6004D707D /* CircleCollectionViewDemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CircleCollectionViewDemoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 51 | B1EE279D203026A6004D707D /* CircleCollectionViewDemoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CircleCollectionViewDemoTests.m; sourceTree = ""; }; 52 | B1EE279F203026A6004D707D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 53 | B1EE27A4203026A7004D707D /* CircleCollectionViewDemoUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CircleCollectionViewDemoUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 54 | B1EE27A8203026A7004D707D /* CircleCollectionViewDemoUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CircleCollectionViewDemoUITests.m; sourceTree = ""; }; 55 | B1EE27AA203026A7004D707D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 56 | B1EE27B620303384004D707D /* CircularCollectionViewLayout.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CircularCollectionViewLayout.h; sourceTree = ""; }; 57 | B1EE27B720303384004D707D /* CircularCollectionViewLayout.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CircularCollectionViewLayout.m; sourceTree = ""; }; 58 | B1EE27B920303EB4004D707D /* CircularCollectionViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CircularCollectionViewCell.h; sourceTree = ""; }; 59 | B1EE27BA20303EB4004D707D /* CircularCollectionViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CircularCollectionViewCell.m; sourceTree = ""; }; 60 | /* End PBXFileReference section */ 61 | 62 | /* Begin PBXFrameworksBuildPhase section */ 63 | B1EE277E203026A6004D707D /* Frameworks */ = { 64 | isa = PBXFrameworksBuildPhase; 65 | buildActionMask = 2147483647; 66 | files = ( 67 | ); 68 | runOnlyForDeploymentPostprocessing = 0; 69 | }; 70 | B1EE2796203026A6004D707D /* Frameworks */ = { 71 | isa = PBXFrameworksBuildPhase; 72 | buildActionMask = 2147483647; 73 | files = ( 74 | ); 75 | runOnlyForDeploymentPostprocessing = 0; 76 | }; 77 | B1EE27A1203026A7004D707D /* Frameworks */ = { 78 | isa = PBXFrameworksBuildPhase; 79 | buildActionMask = 2147483647; 80 | files = ( 81 | ); 82 | runOnlyForDeploymentPostprocessing = 0; 83 | }; 84 | /* End PBXFrameworksBuildPhase section */ 85 | 86 | /* Begin PBXGroup section */ 87 | B1EE2778203026A6004D707D = { 88 | isa = PBXGroup; 89 | children = ( 90 | B1EE2783203026A6004D707D /* CircleCollectionViewDemo */, 91 | B1EE279C203026A6004D707D /* CircleCollectionViewDemoTests */, 92 | B1EE27A7203026A7004D707D /* CircleCollectionViewDemoUITests */, 93 | B1EE2782203026A6004D707D /* Products */, 94 | ); 95 | sourceTree = ""; 96 | }; 97 | B1EE2782203026A6004D707D /* Products */ = { 98 | isa = PBXGroup; 99 | children = ( 100 | B1EE2781203026A6004D707D /* CircleCollectionViewDemo.app */, 101 | B1EE2799203026A6004D707D /* CircleCollectionViewDemoTests.xctest */, 102 | B1EE27A4203026A7004D707D /* CircleCollectionViewDemoUITests.xctest */, 103 | ); 104 | name = Products; 105 | sourceTree = ""; 106 | }; 107 | B1EE2783203026A6004D707D /* CircleCollectionViewDemo */ = { 108 | isa = PBXGroup; 109 | children = ( 110 | B1EE2784203026A6004D707D /* AppDelegate.h */, 111 | B1EE2785203026A6004D707D /* AppDelegate.m */, 112 | B1EE2787203026A6004D707D /* ViewController.h */, 113 | B1EE2788203026A6004D707D /* ViewController.m */, 114 | B1EE278A203026A6004D707D /* Main.storyboard */, 115 | B1EE278D203026A6004D707D /* Assets.xcassets */, 116 | B1EE278F203026A6004D707D /* LaunchScreen.storyboard */, 117 | B1EE2792203026A6004D707D /* Info.plist */, 118 | B1EE2793203026A6004D707D /* main.m */, 119 | B1EE27B620303384004D707D /* CircularCollectionViewLayout.h */, 120 | B1EE27B720303384004D707D /* CircularCollectionViewLayout.m */, 121 | B1EE27B920303EB4004D707D /* CircularCollectionViewCell.h */, 122 | B1EE27BA20303EB4004D707D /* CircularCollectionViewCell.m */, 123 | ); 124 | path = CircleCollectionViewDemo; 125 | sourceTree = ""; 126 | }; 127 | B1EE279C203026A6004D707D /* CircleCollectionViewDemoTests */ = { 128 | isa = PBXGroup; 129 | children = ( 130 | B1EE279D203026A6004D707D /* CircleCollectionViewDemoTests.m */, 131 | B1EE279F203026A6004D707D /* Info.plist */, 132 | ); 133 | path = CircleCollectionViewDemoTests; 134 | sourceTree = ""; 135 | }; 136 | B1EE27A7203026A7004D707D /* CircleCollectionViewDemoUITests */ = { 137 | isa = PBXGroup; 138 | children = ( 139 | B1EE27A8203026A7004D707D /* CircleCollectionViewDemoUITests.m */, 140 | B1EE27AA203026A7004D707D /* Info.plist */, 141 | ); 142 | path = CircleCollectionViewDemoUITests; 143 | sourceTree = ""; 144 | }; 145 | /* End PBXGroup section */ 146 | 147 | /* Begin PBXNativeTarget section */ 148 | B1EE2780203026A6004D707D /* CircleCollectionViewDemo */ = { 149 | isa = PBXNativeTarget; 150 | buildConfigurationList = B1EE27AD203026A7004D707D /* Build configuration list for PBXNativeTarget "CircleCollectionViewDemo" */; 151 | buildPhases = ( 152 | B1EE277D203026A6004D707D /* Sources */, 153 | B1EE277E203026A6004D707D /* Frameworks */, 154 | B1EE277F203026A6004D707D /* Resources */, 155 | ); 156 | buildRules = ( 157 | ); 158 | dependencies = ( 159 | ); 160 | name = CircleCollectionViewDemo; 161 | productName = CircleCollectionViewDemo; 162 | productReference = B1EE2781203026A6004D707D /* CircleCollectionViewDemo.app */; 163 | productType = "com.apple.product-type.application"; 164 | }; 165 | B1EE2798203026A6004D707D /* CircleCollectionViewDemoTests */ = { 166 | isa = PBXNativeTarget; 167 | buildConfigurationList = B1EE27B0203026A7004D707D /* Build configuration list for PBXNativeTarget "CircleCollectionViewDemoTests" */; 168 | buildPhases = ( 169 | B1EE2795203026A6004D707D /* Sources */, 170 | B1EE2796203026A6004D707D /* Frameworks */, 171 | B1EE2797203026A6004D707D /* Resources */, 172 | ); 173 | buildRules = ( 174 | ); 175 | dependencies = ( 176 | B1EE279B203026A6004D707D /* PBXTargetDependency */, 177 | ); 178 | name = CircleCollectionViewDemoTests; 179 | productName = CircleCollectionViewDemoTests; 180 | productReference = B1EE2799203026A6004D707D /* CircleCollectionViewDemoTests.xctest */; 181 | productType = "com.apple.product-type.bundle.unit-test"; 182 | }; 183 | B1EE27A3203026A7004D707D /* CircleCollectionViewDemoUITests */ = { 184 | isa = PBXNativeTarget; 185 | buildConfigurationList = B1EE27B3203026A7004D707D /* Build configuration list for PBXNativeTarget "CircleCollectionViewDemoUITests" */; 186 | buildPhases = ( 187 | B1EE27A0203026A7004D707D /* Sources */, 188 | B1EE27A1203026A7004D707D /* Frameworks */, 189 | B1EE27A2203026A7004D707D /* Resources */, 190 | ); 191 | buildRules = ( 192 | ); 193 | dependencies = ( 194 | B1EE27A6203026A7004D707D /* PBXTargetDependency */, 195 | ); 196 | name = CircleCollectionViewDemoUITests; 197 | productName = CircleCollectionViewDemoUITests; 198 | productReference = B1EE27A4203026A7004D707D /* CircleCollectionViewDemoUITests.xctest */; 199 | productType = "com.apple.product-type.bundle.ui-testing"; 200 | }; 201 | /* End PBXNativeTarget section */ 202 | 203 | /* Begin PBXProject section */ 204 | B1EE2779203026A6004D707D /* Project object */ = { 205 | isa = PBXProject; 206 | attributes = { 207 | LastUpgradeCheck = 0900; 208 | ORGANIZATIONNAME = "GZ GZ"; 209 | TargetAttributes = { 210 | B1EE2780203026A6004D707D = { 211 | CreatedOnToolsVersion = 9.0; 212 | ProvisioningStyle = Automatic; 213 | }; 214 | B1EE2798203026A6004D707D = { 215 | CreatedOnToolsVersion = 9.0; 216 | ProvisioningStyle = Automatic; 217 | TestTargetID = B1EE2780203026A6004D707D; 218 | }; 219 | B1EE27A3203026A7004D707D = { 220 | CreatedOnToolsVersion = 9.0; 221 | ProvisioningStyle = Automatic; 222 | TestTargetID = B1EE2780203026A6004D707D; 223 | }; 224 | }; 225 | }; 226 | buildConfigurationList = B1EE277C203026A6004D707D /* Build configuration list for PBXProject "CircleCollectionViewDemo" */; 227 | compatibilityVersion = "Xcode 8.0"; 228 | developmentRegion = en; 229 | hasScannedForEncodings = 0; 230 | knownRegions = ( 231 | en, 232 | Base, 233 | ); 234 | mainGroup = B1EE2778203026A6004D707D; 235 | productRefGroup = B1EE2782203026A6004D707D /* Products */; 236 | projectDirPath = ""; 237 | projectRoot = ""; 238 | targets = ( 239 | B1EE2780203026A6004D707D /* CircleCollectionViewDemo */, 240 | B1EE2798203026A6004D707D /* CircleCollectionViewDemoTests */, 241 | B1EE27A3203026A7004D707D /* CircleCollectionViewDemoUITests */, 242 | ); 243 | }; 244 | /* End PBXProject section */ 245 | 246 | /* Begin PBXResourcesBuildPhase section */ 247 | B1EE277F203026A6004D707D /* Resources */ = { 248 | isa = PBXResourcesBuildPhase; 249 | buildActionMask = 2147483647; 250 | files = ( 251 | B1EE2791203026A6004D707D /* LaunchScreen.storyboard in Resources */, 252 | B1EE278E203026A6004D707D /* Assets.xcassets in Resources */, 253 | B1EE278C203026A6004D707D /* Main.storyboard in Resources */, 254 | ); 255 | runOnlyForDeploymentPostprocessing = 0; 256 | }; 257 | B1EE2797203026A6004D707D /* Resources */ = { 258 | isa = PBXResourcesBuildPhase; 259 | buildActionMask = 2147483647; 260 | files = ( 261 | ); 262 | runOnlyForDeploymentPostprocessing = 0; 263 | }; 264 | B1EE27A2203026A7004D707D /* Resources */ = { 265 | isa = PBXResourcesBuildPhase; 266 | buildActionMask = 2147483647; 267 | files = ( 268 | ); 269 | runOnlyForDeploymentPostprocessing = 0; 270 | }; 271 | /* End PBXResourcesBuildPhase section */ 272 | 273 | /* Begin PBXSourcesBuildPhase section */ 274 | B1EE277D203026A6004D707D /* Sources */ = { 275 | isa = PBXSourcesBuildPhase; 276 | buildActionMask = 2147483647; 277 | files = ( 278 | B1EE2789203026A6004D707D /* ViewController.m in Sources */, 279 | B1EE2794203026A6004D707D /* main.m in Sources */, 280 | B1EE2786203026A6004D707D /* AppDelegate.m in Sources */, 281 | B1EE27BB20303EB4004D707D /* CircularCollectionViewCell.m in Sources */, 282 | B1EE27B820303384004D707D /* CircularCollectionViewLayout.m in Sources */, 283 | ); 284 | runOnlyForDeploymentPostprocessing = 0; 285 | }; 286 | B1EE2795203026A6004D707D /* Sources */ = { 287 | isa = PBXSourcesBuildPhase; 288 | buildActionMask = 2147483647; 289 | files = ( 290 | B1EE279E203026A6004D707D /* CircleCollectionViewDemoTests.m in Sources */, 291 | ); 292 | runOnlyForDeploymentPostprocessing = 0; 293 | }; 294 | B1EE27A0203026A7004D707D /* Sources */ = { 295 | isa = PBXSourcesBuildPhase; 296 | buildActionMask = 2147483647; 297 | files = ( 298 | B1EE27A9203026A7004D707D /* CircleCollectionViewDemoUITests.m in Sources */, 299 | ); 300 | runOnlyForDeploymentPostprocessing = 0; 301 | }; 302 | /* End PBXSourcesBuildPhase section */ 303 | 304 | /* Begin PBXTargetDependency section */ 305 | B1EE279B203026A6004D707D /* PBXTargetDependency */ = { 306 | isa = PBXTargetDependency; 307 | target = B1EE2780203026A6004D707D /* CircleCollectionViewDemo */; 308 | targetProxy = B1EE279A203026A6004D707D /* PBXContainerItemProxy */; 309 | }; 310 | B1EE27A6203026A7004D707D /* PBXTargetDependency */ = { 311 | isa = PBXTargetDependency; 312 | target = B1EE2780203026A6004D707D /* CircleCollectionViewDemo */; 313 | targetProxy = B1EE27A5203026A7004D707D /* PBXContainerItemProxy */; 314 | }; 315 | /* End PBXTargetDependency section */ 316 | 317 | /* Begin PBXVariantGroup section */ 318 | B1EE278A203026A6004D707D /* Main.storyboard */ = { 319 | isa = PBXVariantGroup; 320 | children = ( 321 | B1EE278B203026A6004D707D /* Base */, 322 | ); 323 | name = Main.storyboard; 324 | sourceTree = ""; 325 | }; 326 | B1EE278F203026A6004D707D /* LaunchScreen.storyboard */ = { 327 | isa = PBXVariantGroup; 328 | children = ( 329 | B1EE2790203026A6004D707D /* Base */, 330 | ); 331 | name = LaunchScreen.storyboard; 332 | sourceTree = ""; 333 | }; 334 | /* End PBXVariantGroup section */ 335 | 336 | /* Begin XCBuildConfiguration section */ 337 | B1EE27AB203026A7004D707D /* Debug */ = { 338 | isa = XCBuildConfiguration; 339 | buildSettings = { 340 | ALWAYS_SEARCH_USER_PATHS = NO; 341 | CLANG_ANALYZER_NONNULL = YES; 342 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 343 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 344 | CLANG_CXX_LIBRARY = "libc++"; 345 | CLANG_ENABLE_MODULES = YES; 346 | CLANG_ENABLE_OBJC_ARC = YES; 347 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 348 | CLANG_WARN_BOOL_CONVERSION = YES; 349 | CLANG_WARN_COMMA = YES; 350 | CLANG_WARN_CONSTANT_CONVERSION = YES; 351 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 352 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 353 | CLANG_WARN_EMPTY_BODY = YES; 354 | CLANG_WARN_ENUM_CONVERSION = YES; 355 | CLANG_WARN_INFINITE_RECURSION = YES; 356 | CLANG_WARN_INT_CONVERSION = YES; 357 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 358 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 359 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 360 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 361 | CLANG_WARN_STRICT_PROTOTYPES = YES; 362 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 363 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 364 | CLANG_WARN_UNREACHABLE_CODE = YES; 365 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 366 | CODE_SIGN_IDENTITY = "iPhone Developer"; 367 | COPY_PHASE_STRIP = NO; 368 | DEBUG_INFORMATION_FORMAT = dwarf; 369 | ENABLE_STRICT_OBJC_MSGSEND = YES; 370 | ENABLE_TESTABILITY = YES; 371 | GCC_C_LANGUAGE_STANDARD = gnu11; 372 | GCC_DYNAMIC_NO_PIC = NO; 373 | GCC_NO_COMMON_BLOCKS = YES; 374 | GCC_OPTIMIZATION_LEVEL = 0; 375 | GCC_PREPROCESSOR_DEFINITIONS = ( 376 | "DEBUG=1", 377 | "$(inherited)", 378 | ); 379 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 380 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 381 | GCC_WARN_UNDECLARED_SELECTOR = YES; 382 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 383 | GCC_WARN_UNUSED_FUNCTION = YES; 384 | GCC_WARN_UNUSED_VARIABLE = YES; 385 | IPHONEOS_DEPLOYMENT_TARGET = 11.0; 386 | MTL_ENABLE_DEBUG_INFO = YES; 387 | ONLY_ACTIVE_ARCH = YES; 388 | SDKROOT = iphoneos; 389 | }; 390 | name = Debug; 391 | }; 392 | B1EE27AC203026A7004D707D /* Release */ = { 393 | isa = XCBuildConfiguration; 394 | buildSettings = { 395 | ALWAYS_SEARCH_USER_PATHS = NO; 396 | CLANG_ANALYZER_NONNULL = YES; 397 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 398 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 399 | CLANG_CXX_LIBRARY = "libc++"; 400 | CLANG_ENABLE_MODULES = YES; 401 | CLANG_ENABLE_OBJC_ARC = YES; 402 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 403 | CLANG_WARN_BOOL_CONVERSION = YES; 404 | CLANG_WARN_COMMA = YES; 405 | CLANG_WARN_CONSTANT_CONVERSION = YES; 406 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 407 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 408 | CLANG_WARN_EMPTY_BODY = YES; 409 | CLANG_WARN_ENUM_CONVERSION = YES; 410 | CLANG_WARN_INFINITE_RECURSION = YES; 411 | CLANG_WARN_INT_CONVERSION = YES; 412 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 413 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 414 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 415 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 416 | CLANG_WARN_STRICT_PROTOTYPES = YES; 417 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 418 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 419 | CLANG_WARN_UNREACHABLE_CODE = YES; 420 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 421 | CODE_SIGN_IDENTITY = "iPhone Developer"; 422 | COPY_PHASE_STRIP = NO; 423 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 424 | ENABLE_NS_ASSERTIONS = NO; 425 | ENABLE_STRICT_OBJC_MSGSEND = YES; 426 | GCC_C_LANGUAGE_STANDARD = gnu11; 427 | GCC_NO_COMMON_BLOCKS = YES; 428 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 429 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 430 | GCC_WARN_UNDECLARED_SELECTOR = YES; 431 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 432 | GCC_WARN_UNUSED_FUNCTION = YES; 433 | GCC_WARN_UNUSED_VARIABLE = YES; 434 | IPHONEOS_DEPLOYMENT_TARGET = 11.0; 435 | MTL_ENABLE_DEBUG_INFO = NO; 436 | SDKROOT = iphoneos; 437 | VALIDATE_PRODUCT = YES; 438 | }; 439 | name = Release; 440 | }; 441 | B1EE27AE203026A7004D707D /* Debug */ = { 442 | isa = XCBuildConfiguration; 443 | buildSettings = { 444 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 445 | CODE_SIGN_STYLE = Automatic; 446 | DEVELOPMENT_TEAM = 3368ZEK9ZZ; 447 | INFOPLIST_FILE = CircleCollectionViewDemo/Info.plist; 448 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 449 | PRODUCT_BUNDLE_IDENTIFIER = soso.CircleCollectionViewDemo; 450 | PRODUCT_NAME = "$(TARGET_NAME)"; 451 | TARGETED_DEVICE_FAMILY = "1,2"; 452 | }; 453 | name = Debug; 454 | }; 455 | B1EE27AF203026A7004D707D /* Release */ = { 456 | isa = XCBuildConfiguration; 457 | buildSettings = { 458 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 459 | CODE_SIGN_STYLE = Automatic; 460 | DEVELOPMENT_TEAM = 3368ZEK9ZZ; 461 | INFOPLIST_FILE = CircleCollectionViewDemo/Info.plist; 462 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 463 | PRODUCT_BUNDLE_IDENTIFIER = soso.CircleCollectionViewDemo; 464 | PRODUCT_NAME = "$(TARGET_NAME)"; 465 | TARGETED_DEVICE_FAMILY = "1,2"; 466 | }; 467 | name = Release; 468 | }; 469 | B1EE27B1203026A7004D707D /* Debug */ = { 470 | isa = XCBuildConfiguration; 471 | buildSettings = { 472 | BUNDLE_LOADER = "$(TEST_HOST)"; 473 | CODE_SIGN_STYLE = Automatic; 474 | INFOPLIST_FILE = CircleCollectionViewDemoTests/Info.plist; 475 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 476 | PRODUCT_BUNDLE_IDENTIFIER = GZ.com.CircleCollectionViewDemoTests; 477 | PRODUCT_NAME = "$(TARGET_NAME)"; 478 | TARGETED_DEVICE_FAMILY = "1,2"; 479 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/CircleCollectionViewDemo.app/CircleCollectionViewDemo"; 480 | }; 481 | name = Debug; 482 | }; 483 | B1EE27B2203026A7004D707D /* Release */ = { 484 | isa = XCBuildConfiguration; 485 | buildSettings = { 486 | BUNDLE_LOADER = "$(TEST_HOST)"; 487 | CODE_SIGN_STYLE = Automatic; 488 | INFOPLIST_FILE = CircleCollectionViewDemoTests/Info.plist; 489 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 490 | PRODUCT_BUNDLE_IDENTIFIER = GZ.com.CircleCollectionViewDemoTests; 491 | PRODUCT_NAME = "$(TARGET_NAME)"; 492 | TARGETED_DEVICE_FAMILY = "1,2"; 493 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/CircleCollectionViewDemo.app/CircleCollectionViewDemo"; 494 | }; 495 | name = Release; 496 | }; 497 | B1EE27B4203026A7004D707D /* Debug */ = { 498 | isa = XCBuildConfiguration; 499 | buildSettings = { 500 | CODE_SIGN_STYLE = Automatic; 501 | INFOPLIST_FILE = CircleCollectionViewDemoUITests/Info.plist; 502 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 503 | PRODUCT_BUNDLE_IDENTIFIER = GZ.com.CircleCollectionViewDemoUITests; 504 | PRODUCT_NAME = "$(TARGET_NAME)"; 505 | TARGETED_DEVICE_FAMILY = "1,2"; 506 | TEST_TARGET_NAME = CircleCollectionViewDemo; 507 | }; 508 | name = Debug; 509 | }; 510 | B1EE27B5203026A7004D707D /* Release */ = { 511 | isa = XCBuildConfiguration; 512 | buildSettings = { 513 | CODE_SIGN_STYLE = Automatic; 514 | INFOPLIST_FILE = CircleCollectionViewDemoUITests/Info.plist; 515 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 516 | PRODUCT_BUNDLE_IDENTIFIER = GZ.com.CircleCollectionViewDemoUITests; 517 | PRODUCT_NAME = "$(TARGET_NAME)"; 518 | TARGETED_DEVICE_FAMILY = "1,2"; 519 | TEST_TARGET_NAME = CircleCollectionViewDemo; 520 | }; 521 | name = Release; 522 | }; 523 | /* End XCBuildConfiguration section */ 524 | 525 | /* Begin XCConfigurationList section */ 526 | B1EE277C203026A6004D707D /* Build configuration list for PBXProject "CircleCollectionViewDemo" */ = { 527 | isa = XCConfigurationList; 528 | buildConfigurations = ( 529 | B1EE27AB203026A7004D707D /* Debug */, 530 | B1EE27AC203026A7004D707D /* Release */, 531 | ); 532 | defaultConfigurationIsVisible = 0; 533 | defaultConfigurationName = Release; 534 | }; 535 | B1EE27AD203026A7004D707D /* Build configuration list for PBXNativeTarget "CircleCollectionViewDemo" */ = { 536 | isa = XCConfigurationList; 537 | buildConfigurations = ( 538 | B1EE27AE203026A7004D707D /* Debug */, 539 | B1EE27AF203026A7004D707D /* Release */, 540 | ); 541 | defaultConfigurationIsVisible = 0; 542 | defaultConfigurationName = Release; 543 | }; 544 | B1EE27B0203026A7004D707D /* Build configuration list for PBXNativeTarget "CircleCollectionViewDemoTests" */ = { 545 | isa = XCConfigurationList; 546 | buildConfigurations = ( 547 | B1EE27B1203026A7004D707D /* Debug */, 548 | B1EE27B2203026A7004D707D /* Release */, 549 | ); 550 | defaultConfigurationIsVisible = 0; 551 | defaultConfigurationName = Release; 552 | }; 553 | B1EE27B3203026A7004D707D /* Build configuration list for PBXNativeTarget "CircleCollectionViewDemoUITests" */ = { 554 | isa = XCConfigurationList; 555 | buildConfigurations = ( 556 | B1EE27B4203026A7004D707D /* Debug */, 557 | B1EE27B5203026A7004D707D /* Release */, 558 | ); 559 | defaultConfigurationIsVisible = 0; 560 | defaultConfigurationName = Release; 561 | }; 562 | /* End XCConfigurationList section */ 563 | }; 564 | rootObject = B1EE2779203026A6004D707D /* Project object */; 565 | } 566 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo.xcodeproj/project.xcworkspace/.svn/entries: -------------------------------------------------------------------------------- 1 | 10 2 | 3 | dir 4 | 983 5 | svn://zcb@svn.gz.com/guan-ios/branches/guan_release_20170512/guan/demo/CircleCollectionViewDemo/CircleCollectionViewDemo.xcodeproj/project.xcworkspace 6 | svn://zcb@svn.gz.com/guan-ios 7 | 8 | 9 | 10 | 2018-03-03T03:39:51.461201Z 11 | 983 12 | hs 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | de11836a-f25c-4d35-a695-785a51a4a29f 28 | 29 | contents.xcworkspacedata 30 | file 31 | 32 | 33 | 34 | 35 | 2018-03-03T03:40:41.000000Z 36 | 60fb8419e88d7c312f3d3e637d86fbc7 37 | 2018-03-03T03:39:51.461201Z 38 | 983 39 | hs 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 169 62 | 63 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo.xcodeproj/project.xcworkspace/.svn/text-base/contents.xcworkspacedata.svn-base: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo.xcodeproj/project.xcworkspace/xcuserdata/soso.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hsoso/CircleCollectionViewDemo/6cabc57ee5bf60177e446c76c46fc7971f7cae69/CircleCollectionViewDemo.xcodeproj/project.xcworkspace/xcuserdata/soso.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /CircleCollectionViewDemo.xcodeproj/xcuserdata/soso.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | CircleCollectionViewDemo.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/.svn/entries: -------------------------------------------------------------------------------- 1 | 10 2 | 3 | dir 4 | 983 5 | svn://zcb@svn.gz.com/guan-ios/branches/guan_release_20170512/guan/demo/CircleCollectionViewDemo/CircleCollectionViewDemo 6 | svn://zcb@svn.gz.com/guan-ios 7 | 8 | 9 | 10 | 2018-03-03T03:39:51.461201Z 11 | 983 12 | hs 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | de11836a-f25c-4d35-a695-785a51a4a29f 28 | 29 | Base.lproj 30 | dir 31 | 32 | CircularCollectionViewLayout.h 33 | file 34 | 35 | 36 | 37 | 38 | 2018-03-03T03:40:41.000000Z 39 | 02bb3e160ec463335200240c81585e1c 40 | 2018-03-03T03:39:51.461201Z 41 | 983 42 | hs 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 477 65 | 66 | main.m 67 | file 68 | 69 | 70 | 71 | 72 | 2018-03-03T03:40:41.000000Z 73 | 7886116323afb5e752c65506284cdb66 74 | 2018-03-03T03:39:51.461201Z 75 | 983 76 | hs 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 345 99 | 100 | AppDelegate.h 101 | file 102 | 103 | 104 | 105 | 106 | 2018-03-03T03:40:41.000000Z 107 | d21734881505757b6453ef99119a7767 108 | 2018-03-03T03:39:51.461201Z 109 | 983 110 | hs 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 288 133 | 134 | CircularCollectionViewCell.h 135 | file 136 | 137 | 138 | 139 | 140 | 2018-03-03T03:40:41.000000Z 141 | 27b3bb9927fbf591670be662aacecdc3 142 | 2018-03-03T03:39:51.461201Z 143 | 983 144 | hs 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 308 167 | 168 | CircularCollectionViewLayout.m 169 | file 170 | 171 | 172 | 173 | 174 | 2018-03-03T03:40:41.000000Z 175 | 18d4c36847fd09afff24c628810f87e9 176 | 2018-03-03T03:39:51.461201Z 177 | 983 178 | hs 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 4710 201 | 202 | ViewController.h 203 | file 204 | 205 | 206 | 207 | 208 | 2018-03-03T03:40:41.000000Z 209 | 396218bcf0bd49887ca9971288d9ea99 210 | 2018-03-03T03:39:51.461201Z 211 | 983 212 | hs 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 226 235 | 236 | Info.plist 237 | file 238 | 239 | 240 | 241 | 242 | 2018-03-03T03:40:41.000000Z 243 | ea74e5cbbb7e74bf700a1c719bdf0c3c 244 | 2018-03-03T03:39:51.461201Z 245 | 983 246 | hs 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 1357 269 | 270 | AppDelegate.m 271 | file 272 | 273 | 274 | 275 | 276 | 2018-03-03T03:40:41.000000Z 277 | 56cd8c59480971e680fb6b10df71d0de 278 | 2018-03-03T03:39:51.461201Z 279 | 983 280 | hs 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 2050 303 | 304 | CircularCollectionViewCell.m 305 | file 306 | 307 | 308 | 309 | 310 | 2018-03-03T03:40:41.000000Z 311 | 79062deda084797f67cc1f155df203e2 312 | 2018-03-03T03:39:51.461201Z 313 | 983 314 | hs 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 1132 337 | 338 | ViewController.m 339 | file 340 | 341 | 342 | 343 | 344 | 2018-03-03T03:40:41.000000Z 345 | 77ed9897a095245912a2db57c2d960c5 346 | 2018-03-03T03:39:51.461201Z 347 | 983 348 | hs 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 3023 371 | 372 | Assets.xcassets 373 | dir 374 | 375 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/.svn/text-base/AppDelegate.h.svn-base: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // CircleCollectionViewDemo 4 | // 5 | // Created by GZ GZ on 2018/2/11. 6 | // Copyright © 2018年 GZ GZ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/.svn/text-base/AppDelegate.m.svn-base: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // CircleCollectionViewDemo 4 | // 5 | // Created by GZ GZ on 2018/2/11. 6 | // Copyright © 2018年 GZ GZ. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | 11 | @interface AppDelegate () 12 | 13 | @end 14 | 15 | @implementation AppDelegate 16 | 17 | 18 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 19 | // Override point for customization after application launch. 20 | return YES; 21 | } 22 | 23 | 24 | - (void)applicationWillResignActive:(UIApplication *)application { 25 | // 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. 26 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 27 | } 28 | 29 | 30 | - (void)applicationDidEnterBackground:(UIApplication *)application { 31 | // 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. 32 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 33 | } 34 | 35 | 36 | - (void)applicationWillEnterForeground:(UIApplication *)application { 37 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 38 | } 39 | 40 | 41 | - (void)applicationDidBecomeActive:(UIApplication *)application { 42 | // 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. 43 | } 44 | 45 | 46 | - (void)applicationWillTerminate:(UIApplication *)application { 47 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 48 | } 49 | 50 | 51 | @end 52 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/.svn/text-base/CircularCollectionViewCell.h.svn-base: -------------------------------------------------------------------------------- 1 | // 2 | // CircularCollectionViewCell.h 3 | // CircleCollectionViewDemo 4 | // 5 | // Created by GZ GZ on 2018/2/11. 6 | // Copyright © 2018年 GZ GZ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface CircularCollectionViewCell : UICollectionViewCell 12 | 13 | @property (nonatomic, strong) UIImageView * imageView; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/.svn/text-base/CircularCollectionViewCell.m.svn-base: -------------------------------------------------------------------------------- 1 | // 2 | // CircularCollectionViewCell.m 3 | // CircleCollectionViewDemo 4 | // 5 | // Created by GZ GZ on 2018/2/11. 6 | // Copyright © 2018年 GZ GZ. All rights reserved. 7 | // 8 | 9 | #import "CircularCollectionViewCell.h" 10 | #import "CircularCollectionViewLayout.h" 11 | 12 | @implementation CircularCollectionViewCell 13 | 14 | -(void)layoutSubviews{ 15 | [super layoutSubviews]; 16 | 17 | self.imageView.frame = self.bounds; 18 | } 19 | 20 | -(void)applyLayoutAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes{ 21 | [super applyLayoutAttributes:layoutAttributes]; 22 | 23 | CircularCollectionViewLayoutAttributes * circularLayoutAttributes = (CircularCollectionViewLayoutAttributes *)layoutAttributes; 24 | self.layer.anchorPoint = circularLayoutAttributes.anchorPoint; 25 | [self setCenter:CGPointMake(self.center.x, self.center.y + (circularLayoutAttributes.anchorPoint.y - 0.5) * CGRectGetHeight(self.bounds))]; 26 | } 27 | 28 | 29 | -(UIImageView *)imageView{ 30 | if(_imageView == nil){ 31 | _imageView = [[UIImageView alloc] init]; 32 | _imageView.contentMode = UIViewContentModeScaleAspectFill; 33 | [self.contentView addSubview:_imageView]; 34 | } 35 | 36 | return _imageView; 37 | } 38 | @end 39 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/.svn/text-base/CircularCollectionViewLayout.h.svn-base: -------------------------------------------------------------------------------- 1 | // 2 | // CircularCollectionViewLayout.h 3 | // CircleCollectionViewDemo 4 | // 5 | // Created by GZ GZ on 2018/2/11. 6 | // Copyright © 2018年 GZ GZ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface CircularCollectionViewLayoutAttributes : UICollectionViewLayoutAttributes 12 | 13 | @property (nonatomic, assign) CGPoint anchorPoint;//所有item围绕的中心点 14 | @property (nonatomic, assign) CGFloat angle; 15 | 16 | @end 17 | 18 | @interface CircularCollectionViewLayout : UICollectionViewLayout 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/.svn/text-base/CircularCollectionViewLayout.m.svn-base: -------------------------------------------------------------------------------- 1 | // 2 | // CircularCollectionViewLayout.m 3 | // CircleCollectionViewDemo 4 | // 5 | // Created by GZ GZ on 2018/2/11. 6 | // Copyright © 2018年 GZ GZ. All rights reserved. 7 | // 8 | 9 | #import "CircularCollectionViewLayout.h" 10 | 11 | @implementation CircularCollectionViewLayoutAttributes 12 | 13 | -(instancetype)init{ 14 | self = [super init]; 15 | if(self){ 16 | [self setup]; 17 | } 18 | 19 | return self; 20 | } 21 | 22 | -(void)setup{ 23 | self.anchorPoint = CGPointMake(0.5, 0.5); 24 | self.angle = 0; 25 | } 26 | 27 | //确保copy的时候,自定义的属性也copy进去了 28 | -(id)copyWithZone:(NSZone *)zone{ 29 | CircularCollectionViewLayoutAttributes * copiedAttributes = [super copyWithZone:zone]; 30 | copiedAttributes.anchorPoint = self.anchorPoint; 31 | copiedAttributes.angle = self.angle; 32 | return copiedAttributes; 33 | } 34 | 35 | -(void)setAngle:(CGFloat)angle{ 36 | _angle = angle; 37 | 38 | //随着角度越大,意味着这个item在越上面,因为是用弧度表示的angle,所以乘一个比较大的数来保证不会出现相同的两个z值 39 | self.zIndex = (int)(self.angle * 1000000); 40 | //设置item的旋转 41 | self.transform = CGAffineTransformMakeRotation(self.angle); 42 | } 43 | 44 | @end 45 | 46 | 47 | @interface CircularCollectionViewLayout() 48 | 49 | @property (nonatomic, assign) CGSize itemSize; 50 | @property (nonatomic, assign) CGFloat angleAtExtreme; 51 | @property (nonatomic, assign) CGFloat angle; 52 | @property (nonatomic, assign) CGFloat radius; 53 | @property (nonatomic, assign) CGFloat anglePerItem; 54 | 55 | @property (nonatomic, strong) NSMutableArray * attributesList; 56 | 57 | @end 58 | 59 | @implementation CircularCollectionViewLayout 60 | 61 | -(instancetype)init{ 62 | self = [super init]; 63 | if(self){ 64 | [self setup]; 65 | } 66 | 67 | return self; 68 | } 69 | 70 | -(void)setup{ 71 | self.itemSize = CGSizeMake(133, 173); 72 | self.radius = 500; 73 | 74 | self.attributesList = [NSMutableArray array]; 75 | } 76 | 77 | -(CGSize)collectionViewContentSize{ 78 | return CGSizeMake(self.itemSize.width * [self.collectionView numberOfItemsInSection:0], self.collectionView.bounds.size.height); 79 | } 80 | 81 | +(Class)layoutAttributesClass{ 82 | return [CircularCollectionViewLayoutAttributes class]; 83 | } 84 | 85 | -(void)prepareLayout{ 86 | [super prepareLayout]; 87 | 88 | NSMutableArray * array = [NSMutableArray array]; 89 | CGFloat centerX = self.collectionView.contentOffset.x + self.collectionView.bounds.size.width / 2.0; 90 | //圆心到item中心的距离,最大为1,所以要除一个item的高度 91 | CGFloat anchorPointY = (self.itemSize.height / 2.0 + self.radius) / self.itemSize.height; 92 | 93 | //判断是否在屏幕内,只创建在屏幕内的cell 94 | CGFloat theta = atan2(CGRectGetWidth(self.collectionView.bounds) / 2.0, self.radius + self.itemSize.height / 2.0 - CGRectGetHeight(self.collectionView.bounds) / 2.0); 95 | int startIndex = 0; 96 | int endIndex = (int)([self.collectionView numberOfItemsInSection:0] - 1); 97 | if(self.angle < -theta){ 98 | startIndex = (int)(floor((-theta - self.angle) / self.anglePerItem)); 99 | } 100 | endIndex = MIN(endIndex, (int)(ceil((theta - self.angle) / self.anglePerItem))); 101 | if(endIndex < startIndex){ 102 | endIndex = 0; 103 | startIndex = 0; 104 | } 105 | 106 | for (int i = startIndex; i <= endIndex; i++) { 107 | CircularCollectionViewLayoutAttributes * attributes = [CircularCollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:[NSIndexPath indexPathForRow:i inSection:0]]; 108 | attributes.size = self.itemSize; 109 | //先放在屏幕中间 110 | attributes.center = CGPointMake(centerX, CGRectGetMidY(self.collectionView.bounds)); 111 | //然后根据角度旋转item 112 | attributes.angle = self.angle + self.anglePerItem * i; 113 | 114 | attributes.anchorPoint = CGPointMake(0.5, anchorPointY); 115 | 116 | [array addObject:attributes]; 117 | } 118 | 119 | self.attributesList = array; 120 | } 121 | 122 | -(NSArray *)layoutAttributesForElementsInRect:(CGRect)rect{ 123 | return self.attributesList; 124 | } 125 | 126 | -(UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath{ 127 | return self.attributesList[indexPath.row]; 128 | } 129 | 130 | -(BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds{ 131 | return YES; 132 | } 133 | 134 | 135 | 136 | #pragma mark getters 137 | -(CGFloat)anglePerItem{ 138 | return atan(self.itemSize.width / self.radius); 139 | } 140 | 141 | -(CGFloat)angleAtExtreme{ 142 | return [self.collectionView numberOfItemsInSection:0] > 0 ? -([self.collectionView numberOfItemsInSection:0] - 1) * self.anglePerItem : 0; 143 | } 144 | 145 | -(CGFloat)angle{ 146 | return self.angleAtExtreme * self.collectionView.contentOffset.x / (self.collectionViewContentSize.width - CGRectGetWidth(self.collectionView.bounds)); 147 | } 148 | 149 | #pragma mark setters 150 | -(void)setRadius:(CGFloat)radius{ 151 | _radius = radius; 152 | 153 | //radius改变的时候,重新计算所有元素 154 | [self invalidateLayout]; 155 | } 156 | 157 | @end 158 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/.svn/text-base/Info.plist.svn-base: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIMainStoryboardFile 26 | Main 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationLandscapeLeft 34 | 35 | UISupportedInterfaceOrientations~ipad 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationPortraitUpsideDown 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/.svn/text-base/ViewController.h.svn-base: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // CircleCollectionViewDemo 4 | // 5 | // Created by GZ GZ on 2018/2/11. 6 | // Copyright © 2018年 GZ GZ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/.svn/text-base/ViewController.m.svn-base: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // CircleCollectionViewDemo 4 | // 5 | // Created by GZ GZ on 2018/2/11. 6 | // Copyright © 2018年 GZ GZ. All rights reserved. 7 | // 8 | 9 | #import "ViewController.h" 10 | #import "CircularCollectionViewLayout.h" 11 | #import "CircularCollectionViewCell.h" 12 | 13 | static NSString * const reuseIdentifier = @"ImageCollectionCell"; 14 | 15 | @interface ViewController () 16 | 17 | @property (nonatomic, strong) UICollectionView * collectionView; 18 | 19 | @end 20 | 21 | @implementation ViewController 22 | 23 | - (void)viewDidLoad { 24 | [super viewDidLoad]; 25 | // Do any additional setup after loading the view, typically from a nib. 26 | 27 | [self setupUI]; 28 | } 29 | 30 | -(void)setupUI{ 31 | [self.view addSubview:self.collectionView]; 32 | 33 | [self.collectionView reloadData]; 34 | } 35 | 36 | #pragma mark collectionView delegate 37 | -(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{ 38 | 39 | } 40 | 41 | #pragma mark collectionView datasource 42 | -(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{ 43 | return 1; 44 | } 45 | 46 | -(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{ 47 | 48 | return 14; 49 | } 50 | 51 | - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { 52 | //创建cell 53 | CircularCollectionViewCell * cell = [self.collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath]; 54 | 55 | //给cell设置内容 56 | cell.contentView.layer.cornerRadius = 5; 57 | cell.contentView.layer.borderColor = [UIColor blackColor].CGColor; 58 | cell.contentView.layer.borderWidth = 1; 59 | // cell.contentView.layer.shouldRasterize = YES; 60 | // cell.contentView.layer.rasterizationScale = [UIScreen mainScreen].scale; 61 | cell.contentView.clipsToBounds = YES; 62 | 63 | 64 | NSString * imageName = [NSString stringWithFormat:@"book_%ld", (long)indexPath.row]; 65 | cell.imageView.image = [UIImage imageNamed:imageName]; 66 | 67 | return cell; 68 | } 69 | 70 | 71 | #pragma mark getters 72 | 73 | -(UICollectionView *)collectionView{ 74 | if(_collectionView == nil){ 75 | //创建uicollectionview 76 | CircularCollectionViewLayout * layout = [[CircularCollectionViewLayout alloc] init]; 77 | 78 | _collectionView = [[UICollectionView alloc] initWithFrame:self.view.bounds collectionViewLayout:layout]; 79 | _collectionView.backgroundColor = [UIColor whiteColor]; 80 | UIImageView * bgImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bg-dark"]]; 81 | bgImageView.contentMode = UIViewContentModeScaleAspectFill; 82 | _collectionView.backgroundView = bgImageView; 83 | _collectionView.delaysContentTouches = NO; 84 | _collectionView.showsVerticalScrollIndicator = NO; 85 | 86 | _collectionView.delegate = self; 87 | _collectionView.dataSource = self; 88 | [_collectionView registerClass:[CircularCollectionViewCell self] forCellWithReuseIdentifier:reuseIdentifier]; 89 | 90 | } 91 | 92 | return _collectionView; 93 | } 94 | 95 | 96 | @end 97 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/.svn/text-base/main.m.svn-base: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // CircleCollectionViewDemo 4 | // 5 | // Created by GZ GZ on 2018/2/11. 6 | // Copyright © 2018年 GZ GZ. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // CircleCollectionViewDemo 4 | // 5 | // Created by He Shun on 2018/2/11. 6 | // Copyright © 2018年 He Shun. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // CircleCollectionViewDemo 4 | // 5 | // Created by He Shun on 2018/2/11. 6 | // Copyright © 2018年 He Shun. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | 11 | @interface AppDelegate () 12 | 13 | @end 14 | 15 | @implementation AppDelegate 16 | 17 | 18 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 19 | // Override point for customization after application launch. 20 | return YES; 21 | } 22 | 23 | 24 | - (void)applicationWillResignActive:(UIApplication *)application { 25 | // 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. 26 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 27 | } 28 | 29 | 30 | - (void)applicationDidEnterBackground:(UIApplication *)application { 31 | // 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. 32 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 33 | } 34 | 35 | 36 | - (void)applicationWillEnterForeground:(UIApplication *)application { 37 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 38 | } 39 | 40 | 41 | - (void)applicationDidBecomeActive:(UIApplication *)application { 42 | // 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. 43 | } 44 | 45 | 46 | - (void)applicationWillTerminate:(UIApplication *)application { 47 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 48 | } 49 | 50 | 51 | @end 52 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/.svn/entries: -------------------------------------------------------------------------------- 1 | 10 2 | 3 | dir 4 | 983 5 | svn://zcb@svn.gz.com/guan-ios/branches/guan_release_20170512/guan/demo/CircleCollectionViewDemo/CircleCollectionViewDemo/Assets.xcassets 6 | svn://zcb@svn.gz.com/guan-ios 7 | 8 | 9 | 10 | 2018-03-03T03:39:51.461201Z 11 | 983 12 | hs 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | de11836a-f25c-4d35-a695-785a51a4a29f 28 | 29 | book_9.imageset 30 | dir 31 | 32 | book_10.imageset 33 | dir 34 | 35 | book_11.imageset 36 | dir 37 | 38 | book_12.imageset 39 | dir 40 | 41 | book_13.imageset 42 | dir 43 | 44 | AppIcon.appiconset 45 | dir 46 | 47 | bg-dark.imageset 48 | dir 49 | 50 | Contents.json 51 | file 52 | 53 | 54 | 55 | 56 | 2018-03-03T03:40:41.000000Z 57 | 31cc68f34934a99c0b0c1bebde56309c 58 | 2018-03-03T03:39:51.461201Z 59 | 983 60 | hs 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 62 83 | 84 | book_0.imageset 85 | dir 86 | 87 | book_1.imageset 88 | dir 89 | 90 | book_2.imageset 91 | dir 92 | 93 | book_3.imageset 94 | dir 95 | 96 | book_4.imageset 97 | dir 98 | 99 | book_5.imageset 100 | dir 101 | 102 | book_6.imageset 103 | dir 104 | 105 | book_7.imageset 106 | dir 107 | 108 | book_8.imageset 109 | dir 110 | 111 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/.svn/text-base/Contents.json.svn-base: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/AppIcon.appiconset/.svn/entries: -------------------------------------------------------------------------------- 1 | 10 2 | 3 | dir 4 | 983 5 | svn://zcb@svn.gz.com/guan-ios/branches/guan_release_20170512/guan/demo/CircleCollectionViewDemo/CircleCollectionViewDemo/Assets.xcassets/AppIcon.appiconset 6 | svn://zcb@svn.gz.com/guan-ios 7 | 8 | 9 | 10 | 2018-03-03T03:39:51.461201Z 11 | 983 12 | hs 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | de11836a-f25c-4d35-a695-785a51a4a29f 28 | 29 | Contents.json 30 | file 31 | 32 | 33 | 34 | 35 | 2018-03-03T03:40:41.000000Z 36 | 752f4c4e6604f7acde4a129962adc9d1 37 | 2018-03-03T03:39:51.461201Z 38 | 983 39 | hs 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 1590 62 | 63 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/AppIcon.appiconset/.svn/text-base/Contents.json.svn-base: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "20x20", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "20x20", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "29x29", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "29x29", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "40x40", 66 | "scale" : "1x" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "size" : "40x40", 71 | "scale" : "2x" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "size" : "76x76", 76 | "scale" : "1x" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "size" : "76x76", 81 | "scale" : "2x" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "size" : "83.5x83.5", 86 | "scale" : "2x" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "size" : "1024x1024", 91 | "scale" : "1x" 92 | } 93 | ], 94 | "info" : { 95 | "version" : 1, 96 | "author" : "xcode" 97 | } 98 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "20x20", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "20x20", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "29x29", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "29x29", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "40x40", 66 | "scale" : "1x" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "size" : "40x40", 71 | "scale" : "2x" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "size" : "76x76", 76 | "scale" : "1x" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "size" : "76x76", 81 | "scale" : "2x" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "size" : "83.5x83.5", 86 | "scale" : "2x" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "size" : "1024x1024", 91 | "scale" : "1x" 92 | } 93 | ], 94 | "info" : { 95 | "version" : 1, 96 | "author" : "xcode" 97 | } 98 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/bg-dark.imageset/.svn/entries: -------------------------------------------------------------------------------- 1 | 10 2 | 3 | dir 4 | 983 5 | svn://zcb@svn.gz.com/guan-ios/branches/guan_release_20170512/guan/demo/CircleCollectionViewDemo/CircleCollectionViewDemo/Assets.xcassets/bg-dark.imageset 6 | svn://zcb@svn.gz.com/guan-ios 7 | 8 | 9 | 10 | 2018-03-03T03:39:51.461201Z 11 | 983 12 | hs 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | de11836a-f25c-4d35-a695-785a51a4a29f 28 | 29 | Contents.json 30 | file 31 | 32 | 33 | 34 | 35 | 2018-03-03T03:40:41.000000Z 36 | 5fbcb1a8a80d9ddf5793cb5b04c77161 37 | 2018-03-03T03:39:51.461201Z 38 | 983 39 | hs 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 304 62 | 63 | bg-dark.jpg 64 | file 65 | 66 | 67 | 68 | 69 | 2018-03-03T03:40:41.000000Z 70 | 80da8ffc711c9d867ab03697344b9d68 71 | 2018-03-03T03:39:51.461201Z 72 | 983 73 | hs 74 | has-props 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 45754 96 | 97 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/bg-dark.imageset/.svn/prop-base/bg-dark.jpg.svn-base: -------------------------------------------------------------------------------- 1 | K 13 2 | svn:mime-type 3 | V 24 4 | application/octet-stream 5 | END 6 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/bg-dark.imageset/.svn/text-base/Contents.json.svn-base: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "bg-dark.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/bg-dark.imageset/.svn/text-base/bg-dark.jpg.svn-base: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hsoso/CircleCollectionViewDemo/6cabc57ee5bf60177e446c76c46fc7971f7cae69/CircleCollectionViewDemo/Assets.xcassets/bg-dark.imageset/.svn/text-base/bg-dark.jpg.svn-base -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/bg-dark.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "bg-dark.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/bg-dark.imageset/bg-dark.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hsoso/CircleCollectionViewDemo/6cabc57ee5bf60177e446c76c46fc7971f7cae69/CircleCollectionViewDemo/Assets.xcassets/bg-dark.imageset/bg-dark.jpg -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_0.imageset/.svn/entries: -------------------------------------------------------------------------------- 1 | 10 2 | 3 | dir 4 | 983 5 | svn://zcb@svn.gz.com/guan-ios/branches/guan_release_20170512/guan/demo/CircleCollectionViewDemo/CircleCollectionViewDemo/Assets.xcassets/book_0.imageset 6 | svn://zcb@svn.gz.com/guan-ios 7 | 8 | 9 | 10 | 2018-03-03T03:39:51.461201Z 11 | 983 12 | hs 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | de11836a-f25c-4d35-a695-785a51a4a29f 28 | 29 | Contents.json 30 | file 31 | 32 | 33 | 34 | 35 | 2018-03-03T03:40:41.000000Z 36 | 70b2f30ef409911cb4cf8573056ee78e 37 | 2018-03-03T03:39:51.461201Z 38 | 983 39 | hs 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 303 62 | 63 | swt@2x.png 64 | file 65 | 66 | 67 | 68 | 69 | 2018-03-03T03:40:41.000000Z 70 | 64318e67e1a240e27938a82d647c6d06 71 | 2018-03-03T03:39:51.461201Z 72 | 983 73 | hs 74 | has-props 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 39244 96 | 97 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_0.imageset/.svn/prop-base/swt@2x.png.svn-base: -------------------------------------------------------------------------------- 1 | K 13 2 | svn:mime-type 3 | V 24 4 | application/octet-stream 5 | END 6 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_0.imageset/.svn/text-base/Contents.json.svn-base: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "swt@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_0.imageset/.svn/text-base/swt@2x.png.svn-base: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hsoso/CircleCollectionViewDemo/6cabc57ee5bf60177e446c76c46fc7971f7cae69/CircleCollectionViewDemo/Assets.xcassets/book_0.imageset/.svn/text-base/swt@2x.png.svn-base -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_0.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "swt@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_0.imageset/swt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hsoso/CircleCollectionViewDemo/6cabc57ee5bf60177e446c76c46fc7971f7cae69/CircleCollectionViewDemo/Assets.xcassets/book_0.imageset/swt@2x.png -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_1.imageset/.svn/entries: -------------------------------------------------------------------------------- 1 | 10 2 | 3 | dir 4 | 983 5 | svn://zcb@svn.gz.com/guan-ios/branches/guan_release_20170512/guan/demo/CircleCollectionViewDemo/CircleCollectionViewDemo/Assets.xcassets/book_1.imageset 6 | svn://zcb@svn.gz.com/guan-ios 7 | 8 | 9 | 10 | 2018-03-03T03:39:51.461201Z 11 | 983 12 | hs 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | de11836a-f25c-4d35-a695-785a51a4a29f 28 | 29 | Contents.json 30 | file 31 | 32 | 33 | 34 | 35 | 2018-03-03T03:40:41.000000Z 36 | 30d7c7e8b29dc7301eacb6b1189537ec 37 | 2018-03-03T03:39:51.461201Z 38 | 983 39 | hs 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 303 62 | 63 | awt@2x.png 64 | file 65 | 66 | 67 | 68 | 69 | 2018-03-03T03:40:41.000000Z 70 | 1936bd1a30252b4639d9581e1a601547 71 | 2018-03-03T03:39:51.461201Z 72 | 983 73 | hs 74 | has-props 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 73866 96 | 97 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_1.imageset/.svn/prop-base/awt@2x.png.svn-base: -------------------------------------------------------------------------------- 1 | K 13 2 | svn:mime-type 3 | V 24 4 | application/octet-stream 5 | END 6 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_1.imageset/.svn/text-base/Contents.json.svn-base: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "awt@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_1.imageset/.svn/text-base/awt@2x.png.svn-base: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hsoso/CircleCollectionViewDemo/6cabc57ee5bf60177e446c76c46fc7971f7cae69/CircleCollectionViewDemo/Assets.xcassets/book_1.imageset/.svn/text-base/awt@2x.png.svn-base -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "awt@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_1.imageset/awt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hsoso/CircleCollectionViewDemo/6cabc57ee5bf60177e446c76c46fc7971f7cae69/CircleCollectionViewDemo/Assets.xcassets/book_1.imageset/awt@2x.png -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_10.imageset/.svn/entries: -------------------------------------------------------------------------------- 1 | 10 2 | 3 | dir 4 | 983 5 | svn://zcb@svn.gz.com/guan-ios/branches/guan_release_20170512/guan/demo/CircleCollectionViewDemo/CircleCollectionViewDemo/Assets.xcassets/book_10.imageset 6 | svn://zcb@svn.gz.com/guan-ios 7 | 8 | 9 | 10 | 2018-03-03T03:39:51.461201Z 11 | 983 12 | hs 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | de11836a-f25c-4d35-a695-785a51a4a29f 28 | 29 | Contents.json 30 | file 31 | 32 | 33 | 34 | 35 | 2018-03-03T03:40:41.000000Z 36 | e373d585e50bd5c99e5006e7ee969661 37 | 2018-03-03T03:39:51.461201Z 38 | 983 39 | hs 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 303 62 | 63 | iat@2x.png 64 | file 65 | 66 | 67 | 68 | 69 | 2018-03-03T03:40:41.000000Z 70 | 161d9ba3d43ca0fd12db215717abe365 71 | 2018-03-03T03:39:51.461201Z 72 | 983 73 | hs 74 | has-props 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 36230 96 | 97 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_10.imageset/.svn/prop-base/iat@2x.png.svn-base: -------------------------------------------------------------------------------- 1 | K 13 2 | svn:mime-type 3 | V 24 4 | application/octet-stream 5 | END 6 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_10.imageset/.svn/text-base/Contents.json.svn-base: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "iat@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_10.imageset/.svn/text-base/iat@2x.png.svn-base: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hsoso/CircleCollectionViewDemo/6cabc57ee5bf60177e446c76c46fc7971f7cae69/CircleCollectionViewDemo/Assets.xcassets/book_10.imageset/.svn/text-base/iat@2x.png.svn-base -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_10.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "iat@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_10.imageset/iat@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hsoso/CircleCollectionViewDemo/6cabc57ee5bf60177e446c76c46fc7971f7cae69/CircleCollectionViewDemo/Assets.xcassets/book_10.imageset/iat@2x.png -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_11.imageset/.svn/entries: -------------------------------------------------------------------------------- 1 | 10 2 | 3 | dir 4 | 983 5 | svn://zcb@svn.gz.com/guan-ios/branches/guan_release_20170512/guan/demo/CircleCollectionViewDemo/CircleCollectionViewDemo/Assets.xcassets/book_11.imageset 6 | svn://zcb@svn.gz.com/guan-ios 7 | 8 | 9 | 10 | 2018-03-03T03:39:51.461201Z 11 | 983 12 | hs 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | de11836a-f25c-4d35-a695-785a51a4a29f 28 | 29 | pgsk@2x.png 30 | file 31 | 32 | 33 | 34 | 35 | 2018-03-03T03:40:41.000000Z 36 | ca5dcef4b0db4f702e9d6673bc438725 37 | 2018-03-03T03:39:51.461201Z 38 | 983 39 | hs 40 | has-props 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 103689 62 | 63 | Contents.json 64 | file 65 | 66 | 67 | 68 | 69 | 2018-03-03T03:40:41.000000Z 70 | d3a945c20fe10f29ccb3a7e5932cec60 71 | 2018-03-03T03:39:51.461201Z 72 | 983 73 | hs 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 304 96 | 97 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_11.imageset/.svn/prop-base/pgsk@2x.png.svn-base: -------------------------------------------------------------------------------- 1 | K 13 2 | svn:mime-type 3 | V 24 4 | application/octet-stream 5 | END 6 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_11.imageset/.svn/text-base/Contents.json.svn-base: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "pgsk@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_11.imageset/.svn/text-base/pgsk@2x.png.svn-base: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hsoso/CircleCollectionViewDemo/6cabc57ee5bf60177e446c76c46fc7971f7cae69/CircleCollectionViewDemo/Assets.xcassets/book_11.imageset/.svn/text-base/pgsk@2x.png.svn-base -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_11.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "pgsk@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_11.imageset/pgsk@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hsoso/CircleCollectionViewDemo/6cabc57ee5bf60177e446c76c46fc7971f7cae69/CircleCollectionViewDemo/Assets.xcassets/book_11.imageset/pgsk@2x.png -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_12.imageset/.svn/entries: -------------------------------------------------------------------------------- 1 | 10 2 | 3 | dir 4 | 983 5 | svn://zcb@svn.gz.com/guan-ios/branches/guan_release_20170512/guan/demo/CircleCollectionViewDemo/CircleCollectionViewDemo/Assets.xcassets/book_12.imageset 6 | svn://zcb@svn.gz.com/guan-ios 7 | 8 | 9 | 10 | 2018-03-03T03:39:51.461201Z 11 | 983 12 | hs 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | de11836a-f25c-4d35-a695-785a51a4a29f 28 | 29 | sgsk@2x.png 30 | file 31 | 32 | 33 | 34 | 35 | 2018-03-03T03:40:41.000000Z 36 | 930e3b18c521fc81998d3ed5c1d361e4 37 | 2018-03-03T03:39:51.461201Z 38 | 983 39 | hs 40 | has-props 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 71349 62 | 63 | Contents.json 64 | file 65 | 66 | 67 | 68 | 69 | 2018-03-03T03:40:41.000000Z 70 | e698b10f1517c15237d10346b6797be1 71 | 2018-03-03T03:39:51.461201Z 72 | 983 73 | hs 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 304 96 | 97 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_12.imageset/.svn/prop-base/sgsk@2x.png.svn-base: -------------------------------------------------------------------------------- 1 | K 13 2 | svn:mime-type 3 | V 24 4 | application/octet-stream 5 | END 6 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_12.imageset/.svn/text-base/Contents.json.svn-base: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "sgsk@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_12.imageset/.svn/text-base/sgsk@2x.png.svn-base: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hsoso/CircleCollectionViewDemo/6cabc57ee5bf60177e446c76c46fc7971f7cae69/CircleCollectionViewDemo/Assets.xcassets/book_12.imageset/.svn/text-base/sgsk@2x.png.svn-base -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_12.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "sgsk@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_12.imageset/sgsk@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hsoso/CircleCollectionViewDemo/6cabc57ee5bf60177e446c76c46fc7971f7cae69/CircleCollectionViewDemo/Assets.xcassets/book_12.imageset/sgsk@2x.png -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_13.imageset/.svn/entries: -------------------------------------------------------------------------------- 1 | 10 2 | 3 | dir 4 | 983 5 | svn://zcb@svn.gz.com/guan-ios/branches/guan_release_20170512/guan/demo/CircleCollectionViewDemo/CircleCollectionViewDemo/Assets.xcassets/book_13.imageset 6 | svn://zcb@svn.gz.com/guan-ios 7 | 8 | 9 | 10 | 2018-03-03T03:39:51.461201Z 11 | 983 12 | hs 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | de11836a-f25c-4d35-a695-785a51a4a29f 28 | 29 | Contents.json 30 | file 31 | 32 | 33 | 34 | 35 | 2018-03-03T03:40:41.000000Z 36 | 339363b043e67e4e12bfc475ee93bd39 37 | 2018-03-03T03:39:51.461201Z 38 | 983 39 | hs 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 303 62 | 63 | skt@2x.png 64 | file 65 | 66 | 67 | 68 | 69 | 2018-03-03T03:40:41.000000Z 70 | 333cb939fd2fbef46f42df1125d469c9 71 | 2018-03-03T03:39:51.461201Z 72 | 983 73 | hs 74 | has-props 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 76573 96 | 97 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_13.imageset/.svn/prop-base/skt@2x.png.svn-base: -------------------------------------------------------------------------------- 1 | K 13 2 | svn:mime-type 3 | V 24 4 | application/octet-stream 5 | END 6 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_13.imageset/.svn/text-base/Contents.json.svn-base: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "skt@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_13.imageset/.svn/text-base/skt@2x.png.svn-base: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hsoso/CircleCollectionViewDemo/6cabc57ee5bf60177e446c76c46fc7971f7cae69/CircleCollectionViewDemo/Assets.xcassets/book_13.imageset/.svn/text-base/skt@2x.png.svn-base -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_13.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "skt@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_13.imageset/skt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hsoso/CircleCollectionViewDemo/6cabc57ee5bf60177e446c76c46fc7971f7cae69/CircleCollectionViewDemo/Assets.xcassets/book_13.imageset/skt@2x.png -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_2.imageset/.svn/entries: -------------------------------------------------------------------------------- 1 | 10 2 | 3 | dir 4 | 983 5 | svn://zcb@svn.gz.com/guan-ios/branches/guan_release_20170512/guan/demo/CircleCollectionViewDemo/CircleCollectionViewDemo/Assets.xcassets/book_2.imageset 6 | svn://zcb@svn.gz.com/guan-ios 7 | 8 | 9 | 10 | 2018-03-03T03:39:51.461201Z 11 | 983 12 | hs 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | de11836a-f25c-4d35-a695-785a51a4a29f 28 | 29 | bgsk@2x.png 30 | file 31 | 32 | 33 | 34 | 35 | 2018-03-03T03:40:41.000000Z 36 | e42480f44c099bd9afe9f31d8a21fa2e 37 | 2018-03-03T03:39:51.461201Z 38 | 983 39 | hs 40 | has-props 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 117004 62 | 63 | Contents.json 64 | file 65 | 66 | 67 | 68 | 69 | 2018-03-03T03:40:41.000000Z 70 | 124b4ff815fe6d023854f9b9700eed16 71 | 2018-03-03T03:39:51.461201Z 72 | 983 73 | hs 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 304 96 | 97 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_2.imageset/.svn/prop-base/bgsk@2x.png.svn-base: -------------------------------------------------------------------------------- 1 | K 13 2 | svn:mime-type 3 | V 24 4 | application/octet-stream 5 | END 6 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_2.imageset/.svn/text-base/Contents.json.svn-base: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "bgsk@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_2.imageset/.svn/text-base/bgsk@2x.png.svn-base: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hsoso/CircleCollectionViewDemo/6cabc57ee5bf60177e446c76c46fc7971f7cae69/CircleCollectionViewDemo/Assets.xcassets/book_2.imageset/.svn/text-base/bgsk@2x.png.svn-base -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "bgsk@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_2.imageset/bgsk@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hsoso/CircleCollectionViewDemo/6cabc57ee5bf60177e446c76c46fc7971f7cae69/CircleCollectionViewDemo/Assets.xcassets/book_2.imageset/bgsk@2x.png -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_3.imageset/.svn/entries: -------------------------------------------------------------------------------- 1 | 10 2 | 3 | dir 4 | 983 5 | svn://zcb@svn.gz.com/guan-ios/branches/guan_release_20170512/guan/demo/CircleCollectionViewDemo/CircleCollectionViewDemo/Assets.xcassets/book_3.imageset 6 | svn://zcb@svn.gz.com/guan-ios 7 | 8 | 9 | 10 | 2018-03-03T03:39:51.461201Z 11 | 983 12 | hs 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | de11836a-f25c-4d35-a695-785a51a4a29f 28 | 29 | Contents.json 30 | file 31 | 32 | 33 | 34 | 35 | 2018-03-03T03:40:41.000000Z 36 | 0374829f897586c5e59900b68e85c364 37 | 2018-03-03T03:39:51.461201Z 38 | 983 39 | hs 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 303 62 | 63 | cdt@2x.png 64 | file 65 | 66 | 67 | 68 | 69 | 2018-03-03T03:40:41.000000Z 70 | 9878b3b8e451769e418cc005ed0a79bc 71 | 2018-03-03T03:39:51.461201Z 72 | 983 73 | hs 74 | has-props 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 58201 96 | 97 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_3.imageset/.svn/prop-base/cdt@2x.png.svn-base: -------------------------------------------------------------------------------- 1 | K 13 2 | svn:mime-type 3 | V 24 4 | application/octet-stream 5 | END 6 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_3.imageset/.svn/text-base/Contents.json.svn-base: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "cdt@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_3.imageset/.svn/text-base/cdt@2x.png.svn-base: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hsoso/CircleCollectionViewDemo/6cabc57ee5bf60177e446c76c46fc7971f7cae69/CircleCollectionViewDemo/Assets.xcassets/book_3.imageset/.svn/text-base/cdt@2x.png.svn-base -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "cdt@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_3.imageset/cdt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hsoso/CircleCollectionViewDemo/6cabc57ee5bf60177e446c76c46fc7971f7cae69/CircleCollectionViewDemo/Assets.xcassets/book_3.imageset/cdt@2x.png -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_4.imageset/.svn/entries: -------------------------------------------------------------------------------- 1 | 10 2 | 3 | dir 4 | 983 5 | svn://zcb@svn.gz.com/guan-ios/branches/guan_release_20170512/guan/demo/CircleCollectionViewDemo/CircleCollectionViewDemo/Assets.xcassets/book_4.imageset 6 | svn://zcb@svn.gz.com/guan-ios 7 | 8 | 9 | 10 | 2018-03-03T03:39:51.461201Z 11 | 983 12 | hs 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | de11836a-f25c-4d35-a695-785a51a4a29f 28 | 29 | Contents.json 30 | file 31 | 32 | 33 | 34 | 35 | 2018-03-03T03:40:41.000000Z 36 | e620ec3c49182dd6f98a1adc9c68d963 37 | 2018-03-03T03:39:51.461201Z 38 | 983 39 | hs 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 303 62 | 63 | i5t@2x.png 64 | file 65 | 66 | 67 | 68 | 69 | 2018-03-03T03:40:41.000000Z 70 | f4a82cd8bd2d0727b8a4d5925c365352 71 | 2018-03-03T03:39:51.461201Z 72 | 983 73 | hs 74 | has-props 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 45834 96 | 97 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_4.imageset/.svn/prop-base/i5t@2x.png.svn-base: -------------------------------------------------------------------------------- 1 | K 13 2 | svn:mime-type 3 | V 24 4 | application/octet-stream 5 | END 6 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_4.imageset/.svn/text-base/Contents.json.svn-base: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "i5t@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_4.imageset/.svn/text-base/i5t@2x.png.svn-base: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hsoso/CircleCollectionViewDemo/6cabc57ee5bf60177e446c76c46fc7971f7cae69/CircleCollectionViewDemo/Assets.xcassets/book_4.imageset/.svn/text-base/i5t@2x.png.svn-base -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_4.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "i5t@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_4.imageset/i5t@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hsoso/CircleCollectionViewDemo/6cabc57ee5bf60177e446c76c46fc7971f7cae69/CircleCollectionViewDemo/Assets.xcassets/book_4.imageset/i5t@2x.png -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_5.imageset/.svn/entries: -------------------------------------------------------------------------------- 1 | 10 2 | 3 | dir 4 | 983 5 | svn://zcb@svn.gz.com/guan-ios/branches/guan_release_20170512/guan/demo/CircleCollectionViewDemo/CircleCollectionViewDemo/Assets.xcassets/book_5.imageset 6 | svn://zcb@svn.gz.com/guan-ios 7 | 8 | 9 | 10 | 2018-03-03T03:39:51.461201Z 11 | 983 12 | hs 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | de11836a-f25c-4d35-a695-785a51a4a29f 28 | 29 | i6t@2x.png 30 | file 31 | 32 | 33 | 34 | 35 | 2018-03-03T03:40:41.000000Z 36 | 74ad4842c8e0e3813b6ac7cc9630d02d 37 | 2018-03-03T03:39:51.461201Z 38 | 983 39 | hs 40 | has-props 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 22628 62 | 63 | Contents.json 64 | file 65 | 66 | 67 | 68 | 69 | 2018-03-03T03:40:41.000000Z 70 | b9ae0efa0e160f2245284997141d072d 71 | 2018-03-03T03:39:51.461201Z 72 | 983 73 | hs 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 303 96 | 97 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_5.imageset/.svn/prop-base/i6t@2x.png.svn-base: -------------------------------------------------------------------------------- 1 | K 13 2 | svn:mime-type 3 | V 24 4 | application/octet-stream 5 | END 6 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_5.imageset/.svn/text-base/Contents.json.svn-base: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "i6t@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_5.imageset/.svn/text-base/i6t@2x.png.svn-base: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hsoso/CircleCollectionViewDemo/6cabc57ee5bf60177e446c76c46fc7971f7cae69/CircleCollectionViewDemo/Assets.xcassets/book_5.imageset/.svn/text-base/i6t@2x.png.svn-base -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_5.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "i6t@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_5.imageset/i6t@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hsoso/CircleCollectionViewDemo/6cabc57ee5bf60177e446c76c46fc7971f7cae69/CircleCollectionViewDemo/Assets.xcassets/book_5.imageset/i6t@2x.png -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_6.imageset/.svn/entries: -------------------------------------------------------------------------------- 1 | 10 2 | 3 | dir 4 | 983 5 | svn://zcb@svn.gz.com/guan-ios/branches/guan_release_20170512/guan/demo/CircleCollectionViewDemo/CircleCollectionViewDemo/Assets.xcassets/book_6.imageset 6 | svn://zcb@svn.gz.com/guan-ios 7 | 8 | 9 | 10 | 2018-03-03T03:39:51.461201Z 11 | 983 12 | hs 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | de11836a-f25c-4d35-a695-785a51a4a29f 28 | 29 | i6tc@2x.png 30 | file 31 | 32 | 33 | 34 | 35 | 2018-03-03T03:40:41.000000Z 36 | 07fd5c8735bc9e2cd127b9cabedd30f2 37 | 2018-03-03T03:39:51.461201Z 38 | 983 39 | hs 40 | has-props 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 63800 62 | 63 | Contents.json 64 | file 65 | 66 | 67 | 68 | 69 | 2018-03-03T03:40:41.000000Z 70 | 68eecf8d7eada127aa390f22d9e0c2f4 71 | 2018-03-03T03:39:51.461201Z 72 | 983 73 | hs 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 304 96 | 97 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_6.imageset/.svn/prop-base/i6tc@2x.png.svn-base: -------------------------------------------------------------------------------- 1 | K 13 2 | svn:mime-type 3 | V 24 4 | application/octet-stream 5 | END 6 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_6.imageset/.svn/text-base/Contents.json.svn-base: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "i6tc@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_6.imageset/.svn/text-base/i6tc@2x.png.svn-base: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hsoso/CircleCollectionViewDemo/6cabc57ee5bf60177e446c76c46fc7971f7cae69/CircleCollectionViewDemo/Assets.xcassets/book_6.imageset/.svn/text-base/i6tc@2x.png.svn-base -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_6.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "i6tc@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_6.imageset/i6tc@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hsoso/CircleCollectionViewDemo/6cabc57ee5bf60177e446c76c46fc7971f7cae69/CircleCollectionViewDemo/Assets.xcassets/book_6.imageset/i6tc@2x.png -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_7.imageset/.svn/entries: -------------------------------------------------------------------------------- 1 | 10 2 | 3 | dir 4 | 983 5 | svn://zcb@svn.gz.com/guan-ios/branches/guan_release_20170512/guan/demo/CircleCollectionViewDemo/CircleCollectionViewDemo/Assets.xcassets/book_7.imageset 6 | svn://zcb@svn.gz.com/guan-ios 7 | 8 | 9 | 10 | 2018-03-03T03:39:51.461201Z 11 | 983 12 | hs 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | de11836a-f25c-4d35-a695-785a51a4a29f 28 | 29 | i7t@2x.png 30 | file 31 | 32 | 33 | 34 | 35 | 2018-03-03T03:40:41.000000Z 36 | 8b93531e9fff4e9a4014ae05ae6a036f 37 | 2018-03-03T03:39:51.461201Z 38 | 983 39 | hs 40 | has-props 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 57090 62 | 63 | Contents.json 64 | file 65 | 66 | 67 | 68 | 69 | 2018-03-03T03:40:41.000000Z 70 | aaa25ff12d8e90fdddcf50661a3b74eb 71 | 2018-03-03T03:39:51.461201Z 72 | 983 73 | hs 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 303 96 | 97 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_7.imageset/.svn/prop-base/i7t@2x.png.svn-base: -------------------------------------------------------------------------------- 1 | K 13 2 | svn:mime-type 3 | V 24 4 | application/octet-stream 5 | END 6 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_7.imageset/.svn/text-base/Contents.json.svn-base: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "i7t@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_7.imageset/.svn/text-base/i7t@2x.png.svn-base: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hsoso/CircleCollectionViewDemo/6cabc57ee5bf60177e446c76c46fc7971f7cae69/CircleCollectionViewDemo/Assets.xcassets/book_7.imageset/.svn/text-base/i7t@2x.png.svn-base -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_7.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "i7t@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_7.imageset/i7t@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hsoso/CircleCollectionViewDemo/6cabc57ee5bf60177e446c76c46fc7971f7cae69/CircleCollectionViewDemo/Assets.xcassets/book_7.imageset/i7t@2x.png -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_8.imageset/.svn/entries: -------------------------------------------------------------------------------- 1 | 10 2 | 3 | dir 4 | 983 5 | svn://zcb@svn.gz.com/guan-ios/branches/guan_release_20170512/guan/demo/CircleCollectionViewDemo/CircleCollectionViewDemo/Assets.xcassets/book_8.imageset 6 | svn://zcb@svn.gz.com/guan-ios 7 | 8 | 9 | 10 | 2018-03-03T03:39:51.461201Z 11 | 983 12 | hs 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | de11836a-f25c-4d35-a695-785a51a4a29f 28 | 29 | i8T@2x.png 30 | file 31 | 32 | 33 | 34 | 35 | 2018-03-03T03:40:41.000000Z 36 | b5a7635d1a59fe17b0db88ada1115014 37 | 2018-03-03T03:39:51.461201Z 38 | 983 39 | hs 40 | has-props 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 73500 62 | 63 | Contents.json 64 | file 65 | 66 | 67 | 68 | 69 | 2018-03-03T03:40:41.000000Z 70 | 25ae808e0ea7b6b2e144c70d05ea22a8 71 | 2018-03-03T03:39:51.461201Z 72 | 983 73 | hs 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 303 96 | 97 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_8.imageset/.svn/prop-base/i8T@2x.png.svn-base: -------------------------------------------------------------------------------- 1 | K 13 2 | svn:mime-type 3 | V 24 4 | application/octet-stream 5 | END 6 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_8.imageset/.svn/text-base/Contents.json.svn-base: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "i8T@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_8.imageset/.svn/text-base/i8T@2x.png.svn-base: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hsoso/CircleCollectionViewDemo/6cabc57ee5bf60177e446c76c46fc7971f7cae69/CircleCollectionViewDemo/Assets.xcassets/book_8.imageset/.svn/text-base/i8T@2x.png.svn-base -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_8.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "i8T@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_8.imageset/i8T@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hsoso/CircleCollectionViewDemo/6cabc57ee5bf60177e446c76c46fc7971f7cae69/CircleCollectionViewDemo/Assets.xcassets/book_8.imageset/i8T@2x.png -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_9.imageset/.svn/entries: -------------------------------------------------------------------------------- 1 | 10 2 | 3 | dir 4 | 983 5 | svn://zcb@svn.gz.com/guan-ios/branches/guan_release_20170512/guan/demo/CircleCollectionViewDemo/CircleCollectionViewDemo/Assets.xcassets/book_9.imageset 6 | svn://zcb@svn.gz.com/guan-ios 7 | 8 | 9 | 10 | 2018-03-03T03:39:51.461201Z 11 | 983 12 | hs 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | de11836a-f25c-4d35-a695-785a51a4a29f 28 | 29 | ia1234@2x.png 30 | file 31 | 32 | 33 | 34 | 35 | 2018-03-03T03:40:41.000000Z 36 | 47549e7a14e0f5fa897572fd6369fc85 37 | 2018-03-03T03:39:51.461201Z 38 | 983 39 | hs 40 | has-props 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 43900 62 | 63 | Contents.json 64 | file 65 | 66 | 67 | 68 | 69 | 2018-03-03T03:40:41.000000Z 70 | c583b947f0470fb90c8e442bb5c5999d 71 | 2018-03-03T03:39:51.461201Z 72 | 983 73 | hs 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 306 96 | 97 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_9.imageset/.svn/prop-base/ia1234@2x.png.svn-base: -------------------------------------------------------------------------------- 1 | K 13 2 | svn:mime-type 3 | V 24 4 | application/octet-stream 5 | END 6 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_9.imageset/.svn/text-base/Contents.json.svn-base: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "ia1234@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_9.imageset/.svn/text-base/ia1234@2x.png.svn-base: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hsoso/CircleCollectionViewDemo/6cabc57ee5bf60177e446c76c46fc7971f7cae69/CircleCollectionViewDemo/Assets.xcassets/book_9.imageset/.svn/text-base/ia1234@2x.png.svn-base -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_9.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "ia1234@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Assets.xcassets/book_9.imageset/ia1234@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hsoso/CircleCollectionViewDemo/6cabc57ee5bf60177e446c76c46fc7971f7cae69/CircleCollectionViewDemo/Assets.xcassets/book_9.imageset/ia1234@2x.png -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Base.lproj/.svn/entries: -------------------------------------------------------------------------------- 1 | 10 2 | 3 | dir 4 | 983 5 | svn://zcb@svn.gz.com/guan-ios/branches/guan_release_20170512/guan/demo/CircleCollectionViewDemo/CircleCollectionViewDemo/Base.lproj 6 | svn://zcb@svn.gz.com/guan-ios 7 | 8 | 9 | 10 | 2018-03-03T03:39:51.461201Z 11 | 983 12 | hs 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | de11836a-f25c-4d35-a695-785a51a4a29f 28 | 29 | LaunchScreen.storyboard 30 | file 31 | 32 | 33 | 34 | 35 | 2018-03-03T03:40:41.000000Z 36 | 9c5eec5b1b704c71540ea9134952cb90 37 | 2018-03-03T03:39:51.461201Z 38 | 983 39 | hs 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 1681 62 | 63 | Main.storyboard 64 | file 65 | 66 | 67 | 68 | 69 | 2018-03-03T03:40:41.000000Z 70 | 5e16ed79398fda30a0d9353b7e336b20 71 | 2018-03-03T03:39:51.461201Z 72 | 983 73 | hs 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 1614 96 | 97 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Base.lproj/.svn/text-base/LaunchScreen.storyboard.svn-base: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Base.lproj/.svn/text-base/Main.storyboard.svn-base: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/CircularCollectionViewCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // CircularCollectionViewCell.h 3 | // CircleCollectionViewDemo 4 | // 5 | // Created by He Shun on 2018/2/11. 6 | // Copyright © 2018年 He Shun. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface CircularCollectionViewCell : UICollectionViewCell 12 | 13 | @property (nonatomic, strong) UIImageView * imageView; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/CircularCollectionViewCell.m: -------------------------------------------------------------------------------- 1 | // 2 | // CircularCollectionViewCell.m 3 | // CircleCollectionViewDemo 4 | // 5 | // Created by He Shun on 2018/2/11. 6 | // Copyright © 2018年 He Shun. All rights reserved. 7 | // 8 | 9 | #import "CircularCollectionViewCell.h" 10 | #import "CircularCollectionViewLayout.h" 11 | 12 | @implementation CircularCollectionViewCell 13 | 14 | -(void)layoutSubviews{ 15 | [super layoutSubviews]; 16 | 17 | self.imageView.frame = self.bounds; 18 | } 19 | 20 | -(void)applyLayoutAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes{ 21 | [super applyLayoutAttributes:layoutAttributes]; 22 | 23 | CircularCollectionViewLayoutAttributes * circularLayoutAttributes = (CircularCollectionViewLayoutAttributes *)layoutAttributes; 24 | self.layer.anchorPoint = circularLayoutAttributes.anchorPoint; 25 | [self setCenter:CGPointMake(self.center.x, self.center.y + (circularLayoutAttributes.anchorPoint.y - 0.5) * CGRectGetHeight(self.bounds))]; 26 | } 27 | 28 | 29 | -(UIImageView *)imageView{ 30 | if(_imageView == nil){ 31 | _imageView = [[UIImageView alloc] init]; 32 | _imageView.contentMode = UIViewContentModeScaleAspectFill; 33 | [self.contentView addSubview:_imageView]; 34 | } 35 | 36 | return _imageView; 37 | } 38 | @end 39 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/CircularCollectionViewLayout.h: -------------------------------------------------------------------------------- 1 | // 2 | // CircularCollectionViewLayout.h 3 | // CircleCollectionViewDemo 4 | // 5 | // Created by He Shun on 2018/2/11. 6 | // Copyright © 2018年 He Shun. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface CircularCollectionViewLayoutAttributes : UICollectionViewLayoutAttributes 12 | 13 | @property (nonatomic, assign) CGPoint anchorPoint;//所有item围绕的中心点 14 | @property (nonatomic, assign) CGFloat angle; 15 | 16 | @end 17 | 18 | @interface CircularCollectionViewLayout : UICollectionViewLayout 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/CircularCollectionViewLayout.m: -------------------------------------------------------------------------------- 1 | // 2 | // CircularCollectionViewLayout.m 3 | // CircleCollectionViewDemo 4 | // 5 | // Created by He Shun on 2018/2/11. 6 | // Copyright © 2018年 He Shun. All rights reserved. 7 | // 8 | 9 | #import "CircularCollectionViewLayout.h" 10 | 11 | @implementation CircularCollectionViewLayoutAttributes 12 | 13 | -(instancetype)init{ 14 | self = [super init]; 15 | if(self){ 16 | [self setup]; 17 | } 18 | 19 | return self; 20 | } 21 | 22 | -(void)setup{ 23 | self.anchorPoint = CGPointMake(0.5, 0.5); 24 | self.angle = 0; 25 | } 26 | 27 | //确保copy的时候,自定义的属性也copy进去了 28 | -(id)copyWithZone:(NSZone *)zone{ 29 | CircularCollectionViewLayoutAttributes * copiedAttributes = [super copyWithZone:zone]; 30 | copiedAttributes.anchorPoint = self.anchorPoint; 31 | copiedAttributes.angle = self.angle; 32 | return copiedAttributes; 33 | } 34 | 35 | -(void)setAngle:(CGFloat)angle{ 36 | _angle = angle; 37 | 38 | //随着角度越大,意味着这个item在越上面,因为是用弧度表示的angle,所以乘一个比较大的数来保证不会出现相同的两个z值 39 | self.zIndex = (int)(self.angle * 1000000); 40 | //设置item的旋转 41 | self.transform = CGAffineTransformMakeRotation(self.angle); 42 | } 43 | 44 | @end 45 | 46 | 47 | @interface CircularCollectionViewLayout() 48 | 49 | @property (nonatomic, assign) CGSize itemSize; 50 | @property (nonatomic, assign) CGFloat angleAtExtreme; 51 | @property (nonatomic, assign) CGFloat angle; 52 | @property (nonatomic, assign) CGFloat radius; 53 | @property (nonatomic, assign) CGFloat anglePerItem; 54 | 55 | @property (nonatomic, strong) NSMutableArray * attributesList; 56 | 57 | @end 58 | 59 | @implementation CircularCollectionViewLayout 60 | 61 | -(instancetype)init{ 62 | self = [super init]; 63 | if(self){ 64 | [self setup]; 65 | } 66 | 67 | return self; 68 | } 69 | 70 | -(void)setup{ 71 | self.itemSize = CGSizeMake(133, 173); 72 | self.radius = 500; 73 | 74 | self.attributesList = [NSMutableArray array]; 75 | } 76 | 77 | -(CGSize)collectionViewContentSize{ 78 | return CGSizeMake(self.itemSize.width * [self.collectionView numberOfItemsInSection:0], self.collectionView.bounds.size.height); 79 | } 80 | 81 | +(Class)layoutAttributesClass{ 82 | return [CircularCollectionViewLayoutAttributes class]; 83 | } 84 | 85 | -(void)prepareLayout{ 86 | [super prepareLayout]; 87 | 88 | NSMutableArray * array = [NSMutableArray array]; 89 | CGFloat centerX = self.collectionView.contentOffset.x + self.collectionView.bounds.size.width / 2.0; 90 | //圆心到item中心的距离,最大为1,所以要除一个item的高度 91 | CGFloat anchorPointY = (self.itemSize.height / 2.0 + self.radius) / self.itemSize.height; 92 | 93 | //判断是否在屏幕内,只创建在屏幕内的cell 94 | CGFloat theta = atan2(CGRectGetWidth(self.collectionView.bounds) / 2.0, self.radius + self.itemSize.height / 2.0 - CGRectGetHeight(self.collectionView.bounds) / 2.0); 95 | int startIndex = 0; 96 | int endIndex = (int)([self.collectionView numberOfItemsInSection:0] - 1); 97 | if(self.angle < -theta){ 98 | startIndex = (int)(floor((-theta - self.angle) / self.anglePerItem)); 99 | } 100 | endIndex = MIN(endIndex, (int)(ceil((theta - self.angle) / self.anglePerItem))); 101 | if(endIndex < startIndex){ 102 | endIndex = 0; 103 | startIndex = 0; 104 | } 105 | 106 | for (int i = startIndex; i <= endIndex; i++) { 107 | CircularCollectionViewLayoutAttributes * attributes = [CircularCollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:[NSIndexPath indexPathForRow:i inSection:0]]; 108 | attributes.size = self.itemSize; 109 | //先放在屏幕中间 110 | attributes.center = CGPointMake(centerX, CGRectGetMidY(self.collectionView.bounds)); 111 | //然后根据角度旋转item 112 | attributes.angle = self.angle + self.anglePerItem * i; 113 | 114 | attributes.anchorPoint = CGPointMake(0.5, anchorPointY); 115 | 116 | [array addObject:attributes]; 117 | } 118 | 119 | self.attributesList = array; 120 | } 121 | 122 | -(NSArray *)layoutAttributesForElementsInRect:(CGRect)rect{ 123 | return self.attributesList; 124 | } 125 | 126 | -(UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath{ 127 | return self.attributesList[indexPath.row]; 128 | } 129 | 130 | -(BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds{ 131 | return YES; 132 | } 133 | 134 | 135 | 136 | #pragma mark getters 137 | -(CGFloat)anglePerItem{ 138 | return atan(self.itemSize.width / self.radius); 139 | } 140 | 141 | -(CGFloat)angleAtExtreme{ 142 | return [self.collectionView numberOfItemsInSection:0] > 0 ? -([self.collectionView numberOfItemsInSection:0] - 1) * self.anglePerItem : 0; 143 | } 144 | 145 | -(CGFloat)angle{ 146 | return self.angleAtExtreme * self.collectionView.contentOffset.x / (self.collectionViewContentSize.width - CGRectGetWidth(self.collectionView.bounds)); 147 | } 148 | 149 | #pragma mark setters 150 | -(void)setRadius:(CGFloat)radius{ 151 | _radius = radius; 152 | 153 | //radius改变的时候,重新计算所有元素 154 | [self invalidateLayout]; 155 | } 156 | 157 | @end 158 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIMainStoryboardFile 26 | Main 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationLandscapeLeft 34 | 35 | UISupportedInterfaceOrientations~ipad 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationPortraitUpsideDown 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // CircleCollectionViewDemo 4 | // 5 | // Created by He Shun on 2018/2/11. 6 | // Copyright © 2018年 He Shun. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/ViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // CircleCollectionViewDemo 4 | // 5 | // Created by He Shun on 2018/2/11. 6 | // Copyright © 2018年 He Shun. All rights reserved. 7 | // 8 | 9 | #import "ViewController.h" 10 | #import "CircularCollectionViewLayout.h" 11 | #import "CircularCollectionViewCell.h" 12 | 13 | static NSString * const reuseIdentifier = @"ImageCollectionCell"; 14 | 15 | @interface ViewController () 16 | 17 | @property (nonatomic, strong) UICollectionView * collectionView; 18 | 19 | @end 20 | 21 | @implementation ViewController 22 | 23 | - (void)viewDidLoad { 24 | [super viewDidLoad]; 25 | // Do any additional setup after loading the view, typically from a nib. 26 | 27 | [self setupUI]; 28 | } 29 | 30 | -(void)setupUI{ 31 | [self.view addSubview:self.collectionView]; 32 | 33 | [self.collectionView reloadData]; 34 | } 35 | 36 | #pragma mark collectionView delegate 37 | -(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{ 38 | 39 | } 40 | 41 | #pragma mark collectionView datasource 42 | -(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{ 43 | return 1; 44 | } 45 | 46 | -(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{ 47 | 48 | return 14; 49 | } 50 | 51 | - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { 52 | //创建cell 53 | CircularCollectionViewCell * cell = [self.collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath]; 54 | 55 | //给cell设置内容 56 | cell.contentView.layer.cornerRadius = 5; 57 | cell.contentView.layer.borderColor = [UIColor blackColor].CGColor; 58 | cell.contentView.layer.borderWidth = 1; 59 | // cell.contentView.layer.shouldRasterize = YES; 60 | // cell.contentView.layer.rasterizationScale = [UIScreen mainScreen].scale; 61 | cell.contentView.clipsToBounds = YES; 62 | 63 | 64 | NSString * imageName = [NSString stringWithFormat:@"book_%ld", (long)indexPath.row]; 65 | cell.imageView.image = [UIImage imageNamed:imageName]; 66 | 67 | return cell; 68 | } 69 | 70 | 71 | #pragma mark getters 72 | 73 | -(UICollectionView *)collectionView{ 74 | if(_collectionView == nil){ 75 | //创建uicollectionview 76 | CircularCollectionViewLayout * layout = [[CircularCollectionViewLayout alloc] init]; 77 | 78 | _collectionView = [[UICollectionView alloc] initWithFrame:self.view.bounds collectionViewLayout:layout]; 79 | _collectionView.backgroundColor = [UIColor whiteColor]; 80 | UIImageView * bgImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bg-dark"]]; 81 | bgImageView.contentMode = UIViewContentModeScaleAspectFill; 82 | _collectionView.backgroundView = bgImageView; 83 | _collectionView.delaysContentTouches = NO; 84 | _collectionView.showsVerticalScrollIndicator = NO; 85 | 86 | _collectionView.delegate = self; 87 | _collectionView.dataSource = self; 88 | [_collectionView registerClass:[CircularCollectionViewCell self] forCellWithReuseIdentifier:reuseIdentifier]; 89 | 90 | } 91 | 92 | return _collectionView; 93 | } 94 | 95 | 96 | @end 97 | -------------------------------------------------------------------------------- /CircleCollectionViewDemo/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // CircleCollectionViewDemo 4 | // 5 | // Created by He Shun on 2018/2/11. 6 | // Copyright © 2018年 He Shun. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /CircleCollectionViewDemoTests/.svn/entries: -------------------------------------------------------------------------------- 1 | 10 2 | 3 | dir 4 | 983 5 | svn://zcb@svn.gz.com/guan-ios/branches/guan_release_20170512/guan/demo/CircleCollectionViewDemo/CircleCollectionViewDemoTests 6 | svn://zcb@svn.gz.com/guan-ios 7 | 8 | 9 | 10 | 2018-03-03T03:39:51.461201Z 11 | 983 12 | hs 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | de11836a-f25c-4d35-a695-785a51a4a29f 28 | 29 | Info.plist 30 | file 31 | 32 | 33 | 34 | 35 | 2018-03-03T03:40:40.000000Z 36 | 36bab341822dc20877d61e22d84d8ae0 37 | 2018-03-03T03:39:51.461201Z 38 | 983 39 | hs 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 701 62 | 63 | CircleCollectionViewDemoTests.m 64 | file 65 | 66 | 67 | 68 | 69 | 2018-03-03T03:40:40.000000Z 70 | 3a7dc050fe9e11b69f07d8c955563bf4 71 | 2018-03-03T03:39:51.461201Z 72 | 983 73 | hs 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 961 96 | 97 | -------------------------------------------------------------------------------- /CircleCollectionViewDemoTests/.svn/text-base/CircleCollectionViewDemoTests.m.svn-base: -------------------------------------------------------------------------------- 1 | // 2 | // CircleCollectionViewDemoTests.m 3 | // CircleCollectionViewDemoTests 4 | // 5 | // Created by GZ GZ on 2018/2/11. 6 | // Copyright © 2018年 GZ GZ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface CircleCollectionViewDemoTests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation CircleCollectionViewDemoTests 16 | 17 | - (void)setUp { 18 | [super setUp]; 19 | // Put setup code here. This method is called before the invocation of each test method in the class. 20 | } 21 | 22 | - (void)tearDown { 23 | // Put teardown code here. This method is called after the invocation of each test method in the class. 24 | [super tearDown]; 25 | } 26 | 27 | - (void)testExample { 28 | // This is an example of a functional test case. 29 | // Use XCTAssert and related functions to verify your tests produce the correct results. 30 | } 31 | 32 | - (void)testPerformanceExample { 33 | // This is an example of a performance test case. 34 | [self measureBlock:^{ 35 | // Put the code you want to measure the time of here. 36 | }]; 37 | } 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /CircleCollectionViewDemoTests/.svn/text-base/Info.plist.svn-base: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /CircleCollectionViewDemoTests/CircleCollectionViewDemoTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // CircleCollectionViewDemoTests.m 3 | // CircleCollectionViewDemoTests 4 | // 5 | // Created by He Shun on 2018/2/11. 6 | // Copyright © 2018年 He Shun. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface CircleCollectionViewDemoTests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation CircleCollectionViewDemoTests 16 | 17 | - (void)setUp { 18 | [super setUp]; 19 | // Put setup code here. This method is called before the invocation of each test method in the class. 20 | } 21 | 22 | - (void)tearDown { 23 | // Put teardown code here. This method is called after the invocation of each test method in the class. 24 | [super tearDown]; 25 | } 26 | 27 | - (void)testExample { 28 | // This is an example of a functional test case. 29 | // Use XCTAssert and related functions to verify your tests produce the correct results. 30 | } 31 | 32 | - (void)testPerformanceExample { 33 | // This is an example of a performance test case. 34 | [self measureBlock:^{ 35 | // Put the code you want to measure the time of here. 36 | }]; 37 | } 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /CircleCollectionViewDemoTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /CircleCollectionViewDemoUITests/.svn/entries: -------------------------------------------------------------------------------- 1 | 10 2 | 3 | dir 4 | 983 5 | svn://zcb@svn.gz.com/guan-ios/branches/guan_release_20170512/guan/demo/CircleCollectionViewDemo/CircleCollectionViewDemoUITests 6 | svn://zcb@svn.gz.com/guan-ios 7 | 8 | 9 | 10 | 2018-03-03T03:39:51.461201Z 11 | 983 12 | hs 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | de11836a-f25c-4d35-a695-785a51a4a29f 28 | 29 | Info.plist 30 | file 31 | 32 | 33 | 34 | 35 | 2018-03-03T03:40:41.000000Z 36 | 36bab341822dc20877d61e22d84d8ae0 37 | 2018-03-03T03:39:51.461201Z 38 | 983 39 | hs 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 701 62 | 63 | CircleCollectionViewDemoUITests.m 64 | file 65 | 66 | 67 | 68 | 69 | 2018-03-03T03:40:41.000000Z 70 | ad95475766809b678293da9ef5b0ab21 71 | 2018-03-03T03:39:51.461201Z 72 | 983 73 | hs 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 1270 96 | 97 | -------------------------------------------------------------------------------- /CircleCollectionViewDemoUITests/.svn/text-base/CircleCollectionViewDemoUITests.m.svn-base: -------------------------------------------------------------------------------- 1 | // 2 | // CircleCollectionViewDemoUITests.m 3 | // CircleCollectionViewDemoUITests 4 | // 5 | // Created by GZ GZ on 2018/2/11. 6 | // Copyright © 2018年 GZ GZ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface CircleCollectionViewDemoUITests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation CircleCollectionViewDemoUITests 16 | 17 | - (void)setUp { 18 | [super setUp]; 19 | 20 | // Put setup code here. This method is called before the invocation of each test method in the class. 21 | 22 | // In UI tests it is usually best to stop immediately when a failure occurs. 23 | self.continueAfterFailure = NO; 24 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. 25 | [[[XCUIApplication alloc] init] launch]; 26 | 27 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 28 | } 29 | 30 | - (void)tearDown { 31 | // Put teardown code here. This method is called after the invocation of each test method in the class. 32 | [super tearDown]; 33 | } 34 | 35 | - (void)testExample { 36 | // Use recording to get started writing UI tests. 37 | // Use XCTAssert and related functions to verify your tests produce the correct results. 38 | } 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /CircleCollectionViewDemoUITests/.svn/text-base/Info.plist.svn-base: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /CircleCollectionViewDemoUITests/CircleCollectionViewDemoUITests.m: -------------------------------------------------------------------------------- 1 | // 2 | // CircleCollectionViewDemoUITests.m 3 | // CircleCollectionViewDemoUITests 4 | // 5 | // Created by He Shun on 2018/2/11. 6 | // Copyright © 2018年 He Shun. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface CircleCollectionViewDemoUITests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation CircleCollectionViewDemoUITests 16 | 17 | - (void)setUp { 18 | [super setUp]; 19 | 20 | // Put setup code here. This method is called before the invocation of each test method in the class. 21 | 22 | // In UI tests it is usually best to stop immediately when a failure occurs. 23 | self.continueAfterFailure = NO; 24 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. 25 | [[[XCUIApplication alloc] init] launch]; 26 | 27 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 28 | } 29 | 30 | - (void)tearDown { 31 | // Put teardown code here. This method is called after the invocation of each test method in the class. 32 | [super tearDown]; 33 | } 34 | 35 | - (void)testExample { 36 | // Use recording to get started writing UI tests. 37 | // Use XCTAssert and related functions to verify your tests produce the correct results. 38 | } 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /CircleCollectionViewDemoUITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CircleCollectionViewDemo --------------------------------------------------------------------------------