From 02fc225898a22cdd2f9135790f5a60c8bafc123f Mon Sep 17 00:00:00 2001 From: Loocor Date: Tue, 15 May 2012 01:28:34 +0800 Subject: [PATCH 1/5] Add Vertical Scroll Layout, but still un-completion... --- MMGridView/Classes/MMGridView.h | 7 +++ MMGridView/Classes/MMGridView.m | 81 +++++++++++++++++++++++------ MMGridView/MMGridViewDefaultCell.h | 3 ++ MMGridView/MMGridViewDefaultCell.m | 12 +++-- MMGridViewDemo/RootViewController.m | 10 +++- 5 files changed, 92 insertions(+), 21 deletions(-) diff --git a/MMGridView/Classes/MMGridView.h b/MMGridView/Classes/MMGridView.h index 030051a..0f83535 100644 --- a/MMGridView/Classes/MMGridView.h +++ b/MMGridView/Classes/MMGridView.h @@ -22,6 +22,10 @@ #import #import "MMGridViewCell.h" +typedef enum { + VerticalLayout, + HorizontalLayout +} GridLayoutStyle; @class MMGridView; @@ -58,6 +62,7 @@ NSUInteger numberOfRows; NSUInteger numberOfColumns; NSUInteger cellMargin; + GridLayoutStyle layoutStyle; } @property (nonatomic, retain, readonly) UIScrollView *scrollView; @@ -68,6 +73,8 @@ @property (nonatomic) NSUInteger cellMargin; @property (nonatomic, readonly) NSUInteger currentPageIndex; @property (nonatomic, readonly) NSUInteger numberOfPages; +@property (nonatomic, readonly) NSUInteger numberOfTatalRows; +@property (nonatomic) GridLayoutStyle layoutStyle; - (void)reloadData; diff --git a/MMGridView/Classes/MMGridView.m b/MMGridView/Classes/MMGridView.m index ec09e50..1574d9e 100644 --- a/MMGridView/Classes/MMGridView.m +++ b/MMGridView/Classes/MMGridView.m @@ -19,6 +19,13 @@ // OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // + +#define K_DEFAULT_NUMBEROFROWS 3 +#define K_DEFAULT_NUMBEROFCOLUMNS 2 +#define K_DEFAULT_CELLMARGIN 5 +#define K_DEFAULT_PAGEINDEX 0 + + #import "MMGridView.h" @@ -27,6 +34,7 @@ @interface MMGridView() @property (nonatomic, retain) UIScrollView *scrollView; @property (nonatomic) NSUInteger currentPageIndex; @property (nonatomic) NSUInteger numberOfPages; +@property (nonatomic) NSUInteger numberOfTatalRows; - (void)createSubviews; - (void)cellWasSelected:(MMGridViewCell *)cell; @@ -45,6 +53,8 @@ @implementation MMGridView @synthesize cellMargin; @synthesize currentPageIndex; @synthesize numberOfPages; +@synthesize numberOfTatalRows; +@synthesize layoutStyle; - (void)dealloc @@ -76,10 +86,11 @@ - (id)initWithCoder:(NSCoder *)aDecoder - (void)createSubviews { - cellMargin = 3; - numberOfRows = 3; - numberOfColumns = 2; - currentPageIndex = 0; + cellMargin = K_DEFAULT_CELLMARGIN; + numberOfRows = K_DEFAULT_NUMBEROFROWS; + numberOfColumns = K_DEFAULT_NUMBEROFCOLUMNS; + currentPageIndex = K_DEFAULT_PAGEINDEX; + layoutStyle = VerticalLayout; self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; self.contentMode = UIViewContentModeRedraw; @@ -87,15 +98,23 @@ - (void)createSubviews self.scrollView = [[[UIScrollView alloc] initWithFrame:self.bounds] autorelease]; self.scrollView.delegate = self; - self.scrollView.backgroundColor = [UIColor clearColor]; + self.scrollView.backgroundColor = self.backgroundColor; self.scrollView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; self.scrollView.alwaysBounceHorizontal = NO; self.scrollView.alwaysBounceVertical = NO; - self.scrollView.showsVerticalScrollIndicator = NO; self.scrollView.showsHorizontalScrollIndicator = NO; - self.scrollView.pagingEnabled = YES; - [self addSubview:self.scrollView]; + if (layoutStyle == HorizontalLayout) { + self.scrollView.pagingEnabled = YES; + self.scrollView.showsVerticalScrollIndicator = NO; + self.scrollView.alwaysBounceVertical = NO; + } else { + self.scrollView.pagingEnabled = NO; + self.scrollView.showsVerticalScrollIndicator = YES; + self.scrollView.alwaysBounceVertical = YES; + } + + [self addSubview:self.scrollView]; [self reloadData]; } @@ -118,7 +137,14 @@ - (void)drawRect:(CGRect)rect CGRect cellBounds = CGRectMake(0, 0, gridBounds.size.width / (float)noOfCols, gridBounds.size.height / (float)noOfRows); - CGSize contentSize = CGSizeMake(self.numberOfPages * gridBounds.size.width, gridBounds.size.height); + CGSize contentSize; + + if (layoutStyle == HorizontalLayout) { + contentSize = CGSizeMake(self.numberOfPages * gridBounds.size.width, gridBounds.size.height); + } else { + contentSize = CGSizeMake(gridBounds.size.width, self.numberOfTatalRows * cellBounds.size.height); + } + [self.scrollView setContentSize:contentSize]; for (UIView *v in self.scrollView.subviews) { @@ -133,9 +159,15 @@ - (void)drawRect:(CGRect)rect NSInteger page = (int)floor((float)i / (float)cellsPerPage); NSInteger row = (int)floor((float)i / (float)noOfCols) - (page * noOfRows); - CGPoint origin = CGPointMake((page * gridBounds.size.width) + ((i % noOfCols) * cellBounds.size.width), - (row * cellBounds.size.height)); - + CGPoint origin; + if (layoutStyle == HorizontalLayout) { + origin = CGPointMake((page * gridBounds.size.width) + ((i % noOfCols) * cellBounds.size.width), + (row * cellBounds.size.height)); + } else { + origin = CGPointMake((i % noOfCols) * cellBounds.size.width, + (ceil( i / noOfCols)) * cellBounds.size.height); + } + CGRect f = CGRectMake(origin.x, origin.y, cellBounds.size.width, cellBounds.size.height); cell.frame = CGRectInset(f, self.cellMargin, self.cellMargin); @@ -175,9 +207,28 @@ - (void)setCellMargin:(NSUInteger)value - (NSUInteger)numberOfPages { - NSUInteger numberOfCells = [self.dataSource numberOfCellsInGridView:self]; - NSUInteger cellsPerPage = self.numberOfColumns * self.numberOfRows; - return (uint)(ceil((float)numberOfCells / (float)cellsPerPage)); + if (layoutStyle == HorizontalLayout) { + NSUInteger numberOfCells = [self.dataSource numberOfCellsInGridView:self]; + NSUInteger cellsPerPage = self.numberOfColumns * self.numberOfRows; + return (uint)(ceil((float)numberOfCells / (float)cellsPerPage)); + } else { + return 1; + } +} + + +- (NSUInteger)numberOfTatalRows +{ + if (layoutStyle == VerticalLayout) { + NSUInteger numberofCells = [self.dataSource numberOfCellsInGridView:self]; + if (numberofCells % numberOfColumns == 0) { + return numberofCells / numberOfColumns; + } else { + return numberofCells / numberOfColumns + 1; + } + } else { + return self.numberOfRows; + } } diff --git a/MMGridView/MMGridViewDefaultCell.h b/MMGridView/MMGridViewDefaultCell.h index 37066c5..59c6cc4 100644 --- a/MMGridView/MMGridViewDefaultCell.h +++ b/MMGridView/MMGridViewDefaultCell.h @@ -28,6 +28,9 @@ UILabel *textLabel; UIView *textLabelBackgroundView; UIView *backgroundView; + + NSUInteger labelHeight; + NSUInteger labelInset; } @property (nonatomic, retain) UILabel *textLabel; diff --git a/MMGridView/MMGridViewDefaultCell.m b/MMGridView/MMGridViewDefaultCell.m index 71397cd..8f20fc9 100644 --- a/MMGridView/MMGridViewDefaultCell.m +++ b/MMGridView/MMGridViewDefaultCell.m @@ -19,8 +19,10 @@ // OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // -#import "MMGridViewDefaultCell.h" +#define K_DEFAULT_LABEL_HEIGHT 30 +#define K_DEFAULT_LABEL_INSET 5 +#import "MMGridViewDefaultCell.h" @implementation MMGridViewDefaultCell @@ -67,8 +69,8 @@ - (void)layoutSubviews { [super layoutSubviews]; - int labelHeight = 30; - int inset = 5; + labelHeight = K_DEFAULT_LABEL_HEIGHT; + labelInset = K_DEFAULT_LABEL_INSET; // Background view self.backgroundView.frame = self.bounds; @@ -76,7 +78,7 @@ - (void)layoutSubviews // Layout label self.textLabelBackgroundView.frame = CGRectMake(0, - self.bounds.size.height - labelHeight - inset, + self.bounds.size.height - labelHeight - labelInset, self.bounds.size.width, labelHeight); self.textLabelBackgroundView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; @@ -86,7 +88,7 @@ - (void)layoutSubviews 0, self.textLabel.superview.bounds.size.width, self.textLabel.superview.bounds.size.height); - self.textLabel.frame = CGRectInset(f, inset, 0); + self.textLabel.frame = CGRectInset(f, labelInset, 0); self.textLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; } diff --git a/MMGridViewDemo/RootViewController.m b/MMGridViewDemo/RootViewController.m index 9364375..187ed6d 100644 --- a/MMGridViewDemo/RootViewController.m +++ b/MMGridViewDemo/RootViewController.m @@ -64,6 +64,14 @@ - (void)viewDidLoad self.navigationItem.rightBarButtonItem = reloadButton; [reloadButton release]; + // setup MMGrid view + + gridView.cellMargin = 5; + gridView.numberOfRows = 4; + gridView.numberOfColumns = 3; + // gridView.layoutStyle = HorizontalLayout; + gridView.layoutStyle = VerticalLayout; + // setup the page control [self setupPageControl]; } @@ -96,7 +104,7 @@ - (void)setupPageControl - (NSInteger)numberOfCellsInGridView:(MMGridView *)gridView { - return 42; + return 29; } From c8a9cb3f51e6f072b01f4cdbddda71e39fcea145 Mon Sep 17 00:00:00 2001 From: Loocor Date: Tue, 15 May 2012 01:28:34 +0800 Subject: [PATCH 2/5] Add Vertical Scroll Layout, but still un-completion... --- .gitignore | 2 - MMGridView.xcodeproj/project.pbxproj | 5 ++ .../contents.xcworkspacedata | 7 ++ .../UserInterfaceState.xcuserstate | Bin 0 -> 18359 bytes .../WorkspaceSettings.xcsettings | 10 +++ .../xcschemes/MMGridView.xcscheme | 58 ++++++++++++ .../xcschemes/MMGridViewDemo.xcscheme | 85 ++++++++++++++++++ .../xcschemes/xcschememanagement.plist | 32 +++++++ MMGridView/Classes/MMGridView.h | 7 ++ MMGridView/Classes/MMGridView.m | 81 +++++++++++++---- MMGridView/MMGridViewDefaultCell.h | 3 + MMGridView/MMGridViewDefaultCell.m | 12 +-- MMGridViewDemo/RootViewController.m | 10 ++- 13 files changed, 289 insertions(+), 23 deletions(-) create mode 100644 MMGridView.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 MMGridView.xcodeproj/project.xcworkspace/xcuserdata/Loocor.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 MMGridView.xcodeproj/project.xcworkspace/xcuserdata/Loocor.xcuserdatad/WorkspaceSettings.xcsettings create mode 100644 MMGridView.xcodeproj/xcuserdata/Loocor.xcuserdatad/xcschemes/MMGridView.xcscheme create mode 100644 MMGridView.xcodeproj/xcuserdata/Loocor.xcuserdatad/xcschemes/MMGridViewDemo.xcscheme create mode 100644 MMGridView.xcodeproj/xcuserdata/Loocor.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/.gitignore b/.gitignore index 07e6ab8..1d42b71 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,2 @@ .DS_Store -*.xcodeproj -*~.nib *.swp \ No newline at end of file diff --git a/MMGridView.xcodeproj/project.pbxproj b/MMGridView.xcodeproj/project.pbxproj index 24d900c..eefdd77 100644 --- a/MMGridView.xcodeproj/project.pbxproj +++ b/MMGridView.xcodeproj/project.pbxproj @@ -240,6 +240,7 @@ 7E6EF36F1340A48600DD91EC /* Project object */ = { isa = PBXProject; attributes = { + LastUpgradeCheck = 0430; ORGANIZATIONNAME = metaminded; }; buildConfigurationList = 7E6EF3721340A48600DD91EC /* Build configuration list for PBXProject "MMGridView" */; @@ -381,6 +382,7 @@ DSTROOT = /tmp/MMGridView.dst; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "MMGridView/MMGridView-Prefix.pch"; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = "$(TARGET_NAME)"; }; @@ -393,6 +395,7 @@ DSTROOT = /tmp/MMGridView.dst; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "MMGridView/MMGridView-Prefix.pch"; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = "$(TARGET_NAME)"; }; @@ -407,6 +410,7 @@ GCC_DYNAMIC_NO_PIC = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "MMGridViewDemo/MMGridViewDemo-Prefix.pch"; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; INFOPLIST_FILE = "MMGridViewDemo/MMGridViewDemo-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 4.3; OTHER_LDFLAGS = ""; @@ -424,6 +428,7 @@ COPY_PHASE_STRIP = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "MMGridViewDemo/MMGridViewDemo-Prefix.pch"; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; INFOPLIST_FILE = "MMGridViewDemo/MMGridViewDemo-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 4.3; OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; diff --git a/MMGridView.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/MMGridView.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..003fa19 --- /dev/null +++ b/MMGridView.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/MMGridView.xcodeproj/project.xcworkspace/xcuserdata/Loocor.xcuserdatad/UserInterfaceState.xcuserstate b/MMGridView.xcodeproj/project.xcworkspace/xcuserdata/Loocor.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..69d39f02dc8fa6fa592b4b1adcbe9f0d79d4b7f6 GIT binary patch literal 18359 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 literal 0 HcmV?d00001 diff --git a/MMGridView.xcodeproj/project.xcworkspace/xcuserdata/Loocor.xcuserdatad/WorkspaceSettings.xcsettings b/MMGridView.xcodeproj/project.xcworkspace/xcuserdata/Loocor.xcuserdatad/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..bfffcfe --- /dev/null +++ b/MMGridView.xcodeproj/project.xcworkspace/xcuserdata/Loocor.xcuserdatad/WorkspaceSettings.xcsettings @@ -0,0 +1,10 @@ + + + + + HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges + + SnapshotAutomaticallyBeforeSignificantChanges + + + diff --git a/MMGridView.xcodeproj/xcuserdata/Loocor.xcuserdatad/xcschemes/MMGridView.xcscheme b/MMGridView.xcodeproj/xcuserdata/Loocor.xcuserdatad/xcschemes/MMGridView.xcscheme new file mode 100644 index 0000000..37adf6a --- /dev/null +++ b/MMGridView.xcodeproj/xcuserdata/Loocor.xcuserdatad/xcschemes/MMGridView.xcscheme @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MMGridView.xcodeproj/xcuserdata/Loocor.xcuserdatad/xcschemes/MMGridViewDemo.xcscheme b/MMGridView.xcodeproj/xcuserdata/Loocor.xcuserdatad/xcschemes/MMGridViewDemo.xcscheme new file mode 100644 index 0000000..4ced999 --- /dev/null +++ b/MMGridView.xcodeproj/xcuserdata/Loocor.xcuserdatad/xcschemes/MMGridViewDemo.xcscheme @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MMGridView.xcodeproj/xcuserdata/Loocor.xcuserdatad/xcschemes/xcschememanagement.plist b/MMGridView.xcodeproj/xcuserdata/Loocor.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..56219e9 --- /dev/null +++ b/MMGridView.xcodeproj/xcuserdata/Loocor.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,32 @@ + + + + + SchemeUserState + + MMGridView.xcscheme + + orderHint + 1 + + MMGridViewDemo.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 7E6EF3771340A48600DD91EC + + primary + + + 7E6EF3C71340B52E00DD91EC + + primary + + + + + diff --git a/MMGridView/Classes/MMGridView.h b/MMGridView/Classes/MMGridView.h index 030051a..0f83535 100644 --- a/MMGridView/Classes/MMGridView.h +++ b/MMGridView/Classes/MMGridView.h @@ -22,6 +22,10 @@ #import #import "MMGridViewCell.h" +typedef enum { + VerticalLayout, + HorizontalLayout +} GridLayoutStyle; @class MMGridView; @@ -58,6 +62,7 @@ NSUInteger numberOfRows; NSUInteger numberOfColumns; NSUInteger cellMargin; + GridLayoutStyle layoutStyle; } @property (nonatomic, retain, readonly) UIScrollView *scrollView; @@ -68,6 +73,8 @@ @property (nonatomic) NSUInteger cellMargin; @property (nonatomic, readonly) NSUInteger currentPageIndex; @property (nonatomic, readonly) NSUInteger numberOfPages; +@property (nonatomic, readonly) NSUInteger numberOfTatalRows; +@property (nonatomic) GridLayoutStyle layoutStyle; - (void)reloadData; diff --git a/MMGridView/Classes/MMGridView.m b/MMGridView/Classes/MMGridView.m index ec09e50..1574d9e 100644 --- a/MMGridView/Classes/MMGridView.m +++ b/MMGridView/Classes/MMGridView.m @@ -19,6 +19,13 @@ // OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // + +#define K_DEFAULT_NUMBEROFROWS 3 +#define K_DEFAULT_NUMBEROFCOLUMNS 2 +#define K_DEFAULT_CELLMARGIN 5 +#define K_DEFAULT_PAGEINDEX 0 + + #import "MMGridView.h" @@ -27,6 +34,7 @@ @interface MMGridView() @property (nonatomic, retain) UIScrollView *scrollView; @property (nonatomic) NSUInteger currentPageIndex; @property (nonatomic) NSUInteger numberOfPages; +@property (nonatomic) NSUInteger numberOfTatalRows; - (void)createSubviews; - (void)cellWasSelected:(MMGridViewCell *)cell; @@ -45,6 +53,8 @@ @implementation MMGridView @synthesize cellMargin; @synthesize currentPageIndex; @synthesize numberOfPages; +@synthesize numberOfTatalRows; +@synthesize layoutStyle; - (void)dealloc @@ -76,10 +86,11 @@ - (id)initWithCoder:(NSCoder *)aDecoder - (void)createSubviews { - cellMargin = 3; - numberOfRows = 3; - numberOfColumns = 2; - currentPageIndex = 0; + cellMargin = K_DEFAULT_CELLMARGIN; + numberOfRows = K_DEFAULT_NUMBEROFROWS; + numberOfColumns = K_DEFAULT_NUMBEROFCOLUMNS; + currentPageIndex = K_DEFAULT_PAGEINDEX; + layoutStyle = VerticalLayout; self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; self.contentMode = UIViewContentModeRedraw; @@ -87,15 +98,23 @@ - (void)createSubviews self.scrollView = [[[UIScrollView alloc] initWithFrame:self.bounds] autorelease]; self.scrollView.delegate = self; - self.scrollView.backgroundColor = [UIColor clearColor]; + self.scrollView.backgroundColor = self.backgroundColor; self.scrollView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; self.scrollView.alwaysBounceHorizontal = NO; self.scrollView.alwaysBounceVertical = NO; - self.scrollView.showsVerticalScrollIndicator = NO; self.scrollView.showsHorizontalScrollIndicator = NO; - self.scrollView.pagingEnabled = YES; - [self addSubview:self.scrollView]; + if (layoutStyle == HorizontalLayout) { + self.scrollView.pagingEnabled = YES; + self.scrollView.showsVerticalScrollIndicator = NO; + self.scrollView.alwaysBounceVertical = NO; + } else { + self.scrollView.pagingEnabled = NO; + self.scrollView.showsVerticalScrollIndicator = YES; + self.scrollView.alwaysBounceVertical = YES; + } + + [self addSubview:self.scrollView]; [self reloadData]; } @@ -118,7 +137,14 @@ - (void)drawRect:(CGRect)rect CGRect cellBounds = CGRectMake(0, 0, gridBounds.size.width / (float)noOfCols, gridBounds.size.height / (float)noOfRows); - CGSize contentSize = CGSizeMake(self.numberOfPages * gridBounds.size.width, gridBounds.size.height); + CGSize contentSize; + + if (layoutStyle == HorizontalLayout) { + contentSize = CGSizeMake(self.numberOfPages * gridBounds.size.width, gridBounds.size.height); + } else { + contentSize = CGSizeMake(gridBounds.size.width, self.numberOfTatalRows * cellBounds.size.height); + } + [self.scrollView setContentSize:contentSize]; for (UIView *v in self.scrollView.subviews) { @@ -133,9 +159,15 @@ - (void)drawRect:(CGRect)rect NSInteger page = (int)floor((float)i / (float)cellsPerPage); NSInteger row = (int)floor((float)i / (float)noOfCols) - (page * noOfRows); - CGPoint origin = CGPointMake((page * gridBounds.size.width) + ((i % noOfCols) * cellBounds.size.width), - (row * cellBounds.size.height)); - + CGPoint origin; + if (layoutStyle == HorizontalLayout) { + origin = CGPointMake((page * gridBounds.size.width) + ((i % noOfCols) * cellBounds.size.width), + (row * cellBounds.size.height)); + } else { + origin = CGPointMake((i % noOfCols) * cellBounds.size.width, + (ceil( i / noOfCols)) * cellBounds.size.height); + } + CGRect f = CGRectMake(origin.x, origin.y, cellBounds.size.width, cellBounds.size.height); cell.frame = CGRectInset(f, self.cellMargin, self.cellMargin); @@ -175,9 +207,28 @@ - (void)setCellMargin:(NSUInteger)value - (NSUInteger)numberOfPages { - NSUInteger numberOfCells = [self.dataSource numberOfCellsInGridView:self]; - NSUInteger cellsPerPage = self.numberOfColumns * self.numberOfRows; - return (uint)(ceil((float)numberOfCells / (float)cellsPerPage)); + if (layoutStyle == HorizontalLayout) { + NSUInteger numberOfCells = [self.dataSource numberOfCellsInGridView:self]; + NSUInteger cellsPerPage = self.numberOfColumns * self.numberOfRows; + return (uint)(ceil((float)numberOfCells / (float)cellsPerPage)); + } else { + return 1; + } +} + + +- (NSUInteger)numberOfTatalRows +{ + if (layoutStyle == VerticalLayout) { + NSUInteger numberofCells = [self.dataSource numberOfCellsInGridView:self]; + if (numberofCells % numberOfColumns == 0) { + return numberofCells / numberOfColumns; + } else { + return numberofCells / numberOfColumns + 1; + } + } else { + return self.numberOfRows; + } } diff --git a/MMGridView/MMGridViewDefaultCell.h b/MMGridView/MMGridViewDefaultCell.h index 37066c5..59c6cc4 100644 --- a/MMGridView/MMGridViewDefaultCell.h +++ b/MMGridView/MMGridViewDefaultCell.h @@ -28,6 +28,9 @@ UILabel *textLabel; UIView *textLabelBackgroundView; UIView *backgroundView; + + NSUInteger labelHeight; + NSUInteger labelInset; } @property (nonatomic, retain) UILabel *textLabel; diff --git a/MMGridView/MMGridViewDefaultCell.m b/MMGridView/MMGridViewDefaultCell.m index 71397cd..8f20fc9 100644 --- a/MMGridView/MMGridViewDefaultCell.m +++ b/MMGridView/MMGridViewDefaultCell.m @@ -19,8 +19,10 @@ // OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // -#import "MMGridViewDefaultCell.h" +#define K_DEFAULT_LABEL_HEIGHT 30 +#define K_DEFAULT_LABEL_INSET 5 +#import "MMGridViewDefaultCell.h" @implementation MMGridViewDefaultCell @@ -67,8 +69,8 @@ - (void)layoutSubviews { [super layoutSubviews]; - int labelHeight = 30; - int inset = 5; + labelHeight = K_DEFAULT_LABEL_HEIGHT; + labelInset = K_DEFAULT_LABEL_INSET; // Background view self.backgroundView.frame = self.bounds; @@ -76,7 +78,7 @@ - (void)layoutSubviews // Layout label self.textLabelBackgroundView.frame = CGRectMake(0, - self.bounds.size.height - labelHeight - inset, + self.bounds.size.height - labelHeight - labelInset, self.bounds.size.width, labelHeight); self.textLabelBackgroundView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; @@ -86,7 +88,7 @@ - (void)layoutSubviews 0, self.textLabel.superview.bounds.size.width, self.textLabel.superview.bounds.size.height); - self.textLabel.frame = CGRectInset(f, inset, 0); + self.textLabel.frame = CGRectInset(f, labelInset, 0); self.textLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; } diff --git a/MMGridViewDemo/RootViewController.m b/MMGridViewDemo/RootViewController.m index 9364375..187ed6d 100644 --- a/MMGridViewDemo/RootViewController.m +++ b/MMGridViewDemo/RootViewController.m @@ -64,6 +64,14 @@ - (void)viewDidLoad self.navigationItem.rightBarButtonItem = reloadButton; [reloadButton release]; + // setup MMGrid view + + gridView.cellMargin = 5; + gridView.numberOfRows = 4; + gridView.numberOfColumns = 3; + // gridView.layoutStyle = HorizontalLayout; + gridView.layoutStyle = VerticalLayout; + // setup the page control [self setupPageControl]; } @@ -96,7 +104,7 @@ - (void)setupPageControl - (NSInteger)numberOfCellsInGridView:(MMGridView *)gridView { - return 42; + return 29; } From 610471ea310392885ba117522f7a4f274d8670bd Mon Sep 17 00:00:00 2001 From: Wangkeke Date: Wed, 9 Jan 2013 11:52:33 +0800 Subject: [PATCH 3/5] support load more. --- MMGridView/Classes/MMGridView.h | 4 ++- MMGridView/Classes/MMGridView.m | 24 +++++++++++++++++- MMGridViewDemo/RootViewController.m | 39 ++++++++++++++++++++++++++--- 3 files changed, 62 insertions(+), 5 deletions(-) diff --git a/MMGridView/Classes/MMGridView.h b/MMGridView/Classes/MMGridView.h index 0f83535..b7568e8 100644 --- a/MMGridView/Classes/MMGridView.h +++ b/MMGridView/Classes/MMGridView.h @@ -36,6 +36,7 @@ typedef enum { @protocol MMGridViewDataSource - (NSInteger)numberOfCellsInGridView:(MMGridView *)gridView; - (MMGridViewCell *)gridView:(MMGridView *)gridView cellAtIndex:(NSUInteger)index; +- (void)loadMoreForGrid; @end // ---------------------------------------------------------------------------------- @@ -43,6 +44,7 @@ typedef enum { #pragma - MMGridViewDelegate @protocol MMGridViewDelegate +-(BOOL)canLoadMoreForGrid; @optional - (void)gridView:(MMGridView *)gridView didSelectCell:(MMGridViewCell *)cell atIndex:(NSUInteger)index; - (void)gridView:(MMGridView *)gridView didDoubleTapCell:(MMGridViewCell *)cell atIndex:(NSUInteger)index; @@ -77,5 +79,5 @@ typedef enum { @property (nonatomic) GridLayoutStyle layoutStyle; - (void)reloadData; - +- (void)loadMoreFinished; @end diff --git a/MMGridView/Classes/MMGridView.m b/MMGridView/Classes/MMGridView.m index 1574d9e..96886fa 100644 --- a/MMGridView/Classes/MMGridView.m +++ b/MMGridView/Classes/MMGridView.m @@ -24,7 +24,7 @@ #define K_DEFAULT_NUMBEROFCOLUMNS 2 #define K_DEFAULT_CELLMARGIN 5 #define K_DEFAULT_PAGEINDEX 0 - +#define K_LOADMORE_HEIGHT 40 #import "MMGridView.h" @@ -35,6 +35,7 @@ @interface MMGridView() @property (nonatomic) NSUInteger currentPageIndex; @property (nonatomic) NSUInteger numberOfPages; @property (nonatomic) NSUInteger numberOfTatalRows; +@property (nonatomic) BOOL isLoadingMore; - (void)createSubviews; - (void)cellWasSelected:(MMGridViewCell *)cell; @@ -86,6 +87,7 @@ - (id)initWithCoder:(NSCoder *)aDecoder - (void)createSubviews { + cellMargin = K_DEFAULT_CELLMARGIN; numberOfRows = K_DEFAULT_NUMBEROFROWS; numberOfColumns = K_DEFAULT_NUMBEROFCOLUMNS; @@ -116,6 +118,8 @@ - (void)createSubviews [self addSubview:self.scrollView]; [self reloadData]; + + _isLoadingMore = NO; } @@ -280,4 +284,22 @@ - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView [self updateCurrentPageIndex]; } + +- (void) scrollViewDidScroll:(UIScrollView *)scrollView +{ + if (!_isLoadingMore && [delegate canLoadMoreForGrid]) { + CGFloat scrollPosition = self.scrollView.contentSize.height - self.scrollView.contentOffset.y- self.scrollView.frame.size.height; + if (scrollPosition < K_LOADMORE_HEIGHT) { + _isLoadingMore = YES; + [dataSource loadMoreForGrid]; + } + } +} + +-(void)loadMoreFinished +{ + _isLoadingMore = NO; +} + + @end diff --git a/MMGridViewDemo/RootViewController.m b/MMGridViewDemo/RootViewController.m index 187ed6d..72b1ef0 100644 --- a/MMGridViewDemo/RootViewController.m +++ b/MMGridViewDemo/RootViewController.m @@ -25,6 +25,11 @@ @interface RootViewController() +{ + +} +@property (retain,nonatomic) NSMutableArray *dataSource; + - (void)reload; - (void)setupPageControl; @end @@ -54,6 +59,11 @@ - (void)viewDidUnload { - (void)viewDidLoad { + self.dataSource = [NSMutableArray arrayWithCapacity:20]; + for (int i = 0; i<20; i++) { + [_dataSource addObject:@"Example"]; + } + // Give us a nice title self.title = @"MMGridView Demo"; @@ -73,7 +83,7 @@ - (void)viewDidLoad gridView.layoutStyle = VerticalLayout; // setup the page control - [self setupPageControl]; + [self setupPageControl]; } @@ -104,7 +114,7 @@ - (void)setupPageControl - (NSInteger)numberOfCellsInGridView:(MMGridView *)gridView { - return 29; + return [_dataSource count]; } @@ -116,7 +126,23 @@ - (MMGridViewCell *)gridView:(MMGridView *)gridView cellAtIndex:(NSUInteger)inde return cell; } -// ---------------------------------------------------------------------------------- +-(void)loadMoreForGrid +{ + //request more data here. + for (int i = 0; i<10; i++) { + [_dataSource addObject:@"Example"]; + } + + [self performSelector:@selector(LoadDataFinished) withObject:nil afterDelay:1.0]; +} + +-(void)LoadDataFinished +{ + [gridView reloadData]; + [gridView loadMoreFinished]; +} + + // ---------------------------------------------------------------------------------- #pragma - MMGridViewDelegate @@ -145,4 +171,11 @@ - (void)gridView:(MMGridView *)theGridView changedPageToIndex:(NSUInteger)index [self setupPageControl]; } +-(BOOL)canLoadMoreForGrid +{ + //return hasMore. + //here assume always YES. + return YES; +} + @end From 624362f3f3b3c7544d9e58b072b103fcf7e1c979 Mon Sep 17 00:00:00 2001 From: Wangkeke Date: Wed, 9 Jan 2013 11:54:22 +0800 Subject: [PATCH 4/5] support load more data support load more data --- .../UserInterfaceState.xcuserstate | Bin 0 -> 11238 bytes .../xcdebugger/Breakpoints.xcbkptlist | 46 ++++++++++ .../xcschemes/MMGridView.xcscheme | 59 ++++++++++++ .../xcschemes/MMGridViewDemo.xcscheme | 86 ++++++++++++++++++ .../xcschemes/xcschememanagement.plist | 32 +++++++ 5 files changed, 223 insertions(+) create mode 100644 MMGridView.xcodeproj/project.xcworkspace/xcuserdata/cokecoffe.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 MMGridView.xcodeproj/xcuserdata/cokecoffe.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist create mode 100644 MMGridView.xcodeproj/xcuserdata/cokecoffe.xcuserdatad/xcschemes/MMGridView.xcscheme create mode 100644 MMGridView.xcodeproj/xcuserdata/cokecoffe.xcuserdatad/xcschemes/MMGridViewDemo.xcscheme create mode 100644 MMGridView.xcodeproj/xcuserdata/cokecoffe.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/MMGridView.xcodeproj/project.xcworkspace/xcuserdata/cokecoffe.xcuserdatad/UserInterfaceState.xcuserstate b/MMGridView.xcodeproj/project.xcworkspace/xcuserdata/cokecoffe.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..4eec41e093d750fbb2a2ef590c45653ed568c15a GIT binary patch literal 11238 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 + + + + + + + + + + diff --git a/MMGridView.xcodeproj/xcuserdata/cokecoffe.xcuserdatad/xcschemes/MMGridView.xcscheme b/MMGridView.xcodeproj/xcuserdata/cokecoffe.xcuserdatad/xcschemes/MMGridView.xcscheme new file mode 100644 index 0000000..9393aee --- /dev/null +++ b/MMGridView.xcodeproj/xcuserdata/cokecoffe.xcuserdatad/xcschemes/MMGridView.xcscheme @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MMGridView.xcodeproj/xcuserdata/cokecoffe.xcuserdatad/xcschemes/MMGridViewDemo.xcscheme b/MMGridView.xcodeproj/xcuserdata/cokecoffe.xcuserdatad/xcschemes/MMGridViewDemo.xcscheme new file mode 100644 index 0000000..01d7300 --- /dev/null +++ b/MMGridView.xcodeproj/xcuserdata/cokecoffe.xcuserdatad/xcschemes/MMGridViewDemo.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MMGridView.xcodeproj/xcuserdata/cokecoffe.xcuserdatad/xcschemes/xcschememanagement.plist b/MMGridView.xcodeproj/xcuserdata/cokecoffe.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..0888ffd --- /dev/null +++ b/MMGridView.xcodeproj/xcuserdata/cokecoffe.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,32 @@ + + + + + SchemeUserState + + MMGridView.xcscheme + + orderHint + 0 + + MMGridViewDemo.xcscheme + + orderHint + 1 + + + SuppressBuildableAutocreation + + 7E6EF3771340A48600DD91EC + + primary + + + 7E6EF3C71340B52E00DD91EC + + primary + + + + + From 30de06b0b904bc2630afd3435520f5d31cda5b54 Mon Sep 17 00:00:00 2001 From: Wangkeke Date: Wed, 16 Jan 2013 15:53:21 +0800 Subject: [PATCH 5/5] fix bug:when rotate view to Landscape mode,sometime row and column are wrong. --- .../UserInterfaceState.xcuserstate | Bin 11238 -> 15990 bytes .../xcdebugger/Breakpoints.xcbkptlist | 41 ------------------ MMGridView/Classes/MMGridView.m | 35 ++++++++++----- MMGridView/MMGridViewDefaultCell.m | 2 +- MMGridViewDemo/RootViewController.m | 2 +- 5 files changed, 27 insertions(+), 53 deletions(-) diff --git a/MMGridView.xcodeproj/project.xcworkspace/xcuserdata/cokecoffe.xcuserdatad/UserInterfaceState.xcuserstate b/MMGridView.xcodeproj/project.xcworkspace/xcuserdata/cokecoffe.xcuserdatad/UserInterfaceState.xcuserstate index 4eec41e093d750fbb2a2ef590c45653ed568c15a..32edc00d8a7abc34a68f89c709795fa64eca604c 100644 GIT binary patch literal 15990 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 bkesNTlpK9dM$nrC2#MbkwfG(S%*pyc9Wk$V delta 6358 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 diff --git a/MMGridView.xcodeproj/xcuserdata/cokecoffe.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist b/MMGridView.xcodeproj/xcuserdata/cokecoffe.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist index 658edc7..05301bc 100644 --- a/MMGridView.xcodeproj/xcuserdata/cokecoffe.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist +++ b/MMGridView.xcodeproj/xcuserdata/cokecoffe.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist @@ -2,45 +2,4 @@ - - - - - - - - diff --git a/MMGridView/Classes/MMGridView.m b/MMGridView/Classes/MMGridView.m index 96886fa..54b127d 100644 --- a/MMGridView/Classes/MMGridView.m +++ b/MMGridView/Classes/MMGridView.m @@ -130,13 +130,6 @@ - (void)drawRect:(CGRect)rect NSInteger noOfRows = self.numberOfRows; NSUInteger cellsPerPage = self.numberOfColumns * self.numberOfRows; - BOOL isLandscape = UIInterfaceOrientationIsLandscape([[UIDevice currentDevice] orientation]); - if (isLandscape) { - // In landscape mode switch rows and columns - noOfCols = self.numberOfRows; - noOfRows = self.numberOfColumns; - } - CGRect gridBounds = self.scrollView.bounds; CGRect cellBounds = CGRectMake(0, 0, gridBounds.size.width / (float)noOfCols, gridBounds.size.height / (float)noOfRows); @@ -201,6 +194,27 @@ - (void)setNumberOfRows:(NSUInteger)value [self reloadData]; } +-(NSUInteger)numberOfRows +{ + UIInterfaceOrientation currentOrientation = [UIApplication sharedApplication].statusBarOrientation; + BOOL isLandscape = UIInterfaceOrientationIsLandscape(currentOrientation); + if (isLandscape) { + return numberOfColumns; + }else{ + return numberOfRows; + } +} + +-(NSUInteger)numberOfColumns +{ + UIInterfaceOrientation currentOrientation = [UIApplication sharedApplication].statusBarOrientation; + BOOL isLandscape = UIInterfaceOrientationIsLandscape(currentOrientation); + if (isLandscape) { + return numberOfRows; + }else{ + return numberOfColumns; + } +} - (void)setCellMargin:(NSUInteger)value { @@ -225,10 +239,10 @@ - (NSUInteger)numberOfTatalRows { if (layoutStyle == VerticalLayout) { NSUInteger numberofCells = [self.dataSource numberOfCellsInGridView:self]; - if (numberofCells % numberOfColumns == 0) { - return numberofCells / numberOfColumns; + if (numberofCells % self.numberOfColumns == 0) { + return numberofCells / self.numberOfColumns; } else { - return numberofCells / numberOfColumns + 1; + return numberofCells / self.numberOfColumns + 1; } } else { return self.numberOfRows; @@ -236,6 +250,7 @@ - (NSUInteger)numberOfTatalRows } + - (void)reloadData { [self setNeedsDisplay]; diff --git a/MMGridView/MMGridViewDefaultCell.m b/MMGridView/MMGridViewDefaultCell.m index 8f20fc9..c6a50b2 100644 --- a/MMGridView/MMGridViewDefaultCell.m +++ b/MMGridView/MMGridViewDefaultCell.m @@ -71,7 +71,7 @@ - (void)layoutSubviews labelHeight = K_DEFAULT_LABEL_HEIGHT; labelInset = K_DEFAULT_LABEL_INSET; - + // Background view self.backgroundView.frame = self.bounds; self.backgroundView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; diff --git a/MMGridViewDemo/RootViewController.m b/MMGridViewDemo/RootViewController.m index 72b1ef0..e6c9d5b 100644 --- a/MMGridViewDemo/RootViewController.m +++ b/MMGridViewDemo/RootViewController.m @@ -129,7 +129,7 @@ - (MMGridViewCell *)gridView:(MMGridView *)gridView cellAtIndex:(NSUInteger)inde -(void)loadMoreForGrid { //request more data here. - for (int i = 0; i<10; i++) { + for (int i = 0; i<12; i++) { [_dataSource addObject:@"Example"]; }