Skip to content

Commit

Permalink
v2.0
Browse files Browse the repository at this point in the history
  • Loading branch information
gbammc committed Feb 26, 2014
0 parents commit 4a5d245
Show file tree
Hide file tree
Showing 380 changed files with 30,944 additions and 0 deletions.
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Podfile.*
resource/*
iSCAU/Vendor/Reveal*
build/*
Pods/
58 changes: 58 additions & 0 deletions EditedPods/CollapseClick/CollapseClick/CollapseClick.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
//
// CollapseClick.h
// CollapseClick
//
// Created by Ben Gordon on 2/28/13.
// Copyright (c) 2013 Ben Gordon. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "CollapseClickCell.h"

#define kCCPad 0

//////////////
// Delegate //
//////////////
@protocol CollapseClickDelegate
@required
-(int)numberOfCellsForCollapseClick;
-(NSString *)titleForCollapseClickAtIndex:(int)index;
-(UIView *)viewForCollapseClickContentViewAtIndex:(int)index;

@optional
-(UIColor *)colorForCollapseClickTitleViewAtIndex:(int)index;
-(UIColor *)colorForTitleLabelAtIndex:(int)index;
-(UIColor *)colorForTitleArrowAtIndex:(int)index;
-(void)didClickCollapseClickCellAtIndex:(int)index isNowOpen:(BOOL)open;

@end




///////////////
// Interface //
///////////////
@interface CollapseClick : UIScrollView <UIScrollViewDelegate> {
__weak id <CollapseClickDelegate> CollapseClickDelegate;
}

// Delegate
@property (weak) id <CollapseClickDelegate> CollapseClickDelegate;

// Properties
@property (nonatomic, retain) NSMutableArray *isClickedArray;
@property (nonatomic, retain) NSMutableArray *dataArray;

// Methods
-(void)reloadCollapseClick;
-(CollapseClickCell *)collapseClickCellForIndex:(int)index;
-(void)scrollToCollapseClickCellAtIndex:(int)index animated:(BOOL)animated;
-(UIView *)contentViewForCellAtIndex:(int)index;
-(void)openCollapseClickCellAtIndex:(int)index animated:(BOOL)animated;
-(void)closeCollapseClickCellAtIndex:(int)index animated:(BOOL)animated;
-(void)openCollapseClickCellsWithIndexes:(NSArray *)indexArray animated:(BOOL)animated;
-(void)closeCollapseClickCellsWithIndexes:(NSArray *)indexArray animated:(BOOL)animated;

@end
256 changes: 256 additions & 0 deletions EditedPods/CollapseClick/CollapseClick/CollapseClick.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,256 @@
//
// CollapseClick.m
// CollapseClick
//
// Created by Ben Gordon on 2/28/13.
// Copyright (c) 2013 Ben Gordon. All rights reserved.
//

#import "CollapseClick.h"

@implementation CollapseClick
@synthesize CollapseClickDelegate;

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
self.isClickedArray = [[NSMutableArray alloc] initWithCapacity:[CollapseClickDelegate numberOfCellsForCollapseClick]];
self.dataArray = [[NSMutableArray alloc] initWithCapacity:[CollapseClickDelegate numberOfCellsForCollapseClick]];
[self reloadCollapseClick];


// Makes scrollview certainly scrollable
CGFloat totalHeight = self.frame.size.height + 1;

// Set self's ContentSize and ContentOffset
[self setContentSize:CGSizeMake(self.frame.size.width, totalHeight)];
self.backgroundColor = [UIColor clearColor];
}
return self;
}


#pragma mark - Load Data
-(void)reloadCollapseClick {
// Set Up: Height
float totalHeight = 0;

// If Arrays aren't Init'd, Init them
if (!(self.isClickedArray)) {
self.isClickedArray = [[NSMutableArray alloc] initWithCapacity:[CollapseClickDelegate numberOfCellsForCollapseClick]];
}

if (!(self.dataArray)) {
self.dataArray = [[NSMutableArray alloc] initWithCapacity:[CollapseClickDelegate numberOfCellsForCollapseClick]];
}

// Make sure they are clear
[self.isClickedArray removeAllObjects];
[self.dataArray removeAllObjects];

// Remove all subviews
for (UIView *subview in self.subviews) {
[subview removeFromSuperview];
}

// Add cells
for (int xx = 0; xx < [CollapseClickDelegate numberOfCellsForCollapseClick]; xx++) {
// Create Cell
CollapseClickCell *cell = [CollapseClickCell newCollapseClickCellWithTitle:[CollapseClickDelegate titleForCollapseClickAtIndex:xx] index:xx content:[CollapseClickDelegate viewForCollapseClickContentViewAtIndex:xx]];


// Set cell.TitleView's backgroundColor
if ([(id)CollapseClickDelegate respondsToSelector:@selector(colorForCollapseClickTitleViewAtIndex:)]) {
cell.TitleView.backgroundColor = [CollapseClickDelegate colorForCollapseClickTitleViewAtIndex:xx];
}
else {
cell.TitleView.backgroundColor = [UIColor colorWithWhite:0.4 alpha:1.0];
}


// Set cell.TitleLabel's Color
if ([(id)CollapseClickDelegate respondsToSelector:@selector(colorForTitleLabelAtIndex:)]) {
cell.TitleLabel.textColor = [CollapseClickDelegate colorForTitleLabelAtIndex:xx];
}
else {
cell.TitleLabel.textColor = [UIColor whiteColor];
}


// Set cell.TitleArrow's Color
if ([(id)CollapseClickDelegate respondsToSelector:@selector(colorForTitleArrowAtIndex:)]) {
[cell.TitleArrow drawWithColor:[CollapseClickDelegate colorForTitleArrowAtIndex:xx]];
}
else {
[cell.TitleArrow drawWithColor:[UIColor colorWithWhite:0.0 alpha:0.35]];
}

// Set cell.ContentView's size
cell.ContentView.frame = CGRectMake(0, kCCHeaderHeight + kCCPad, self.frame.size.width, cell.ContentView.frame.size.height);

// Set cell's size
cell.frame = CGRectMake(0, totalHeight, self.frame.size.width, kCCHeaderHeight);


// Add target to Button
[cell.TitleButton addTarget:self action:@selector(didSelectCollapseClickButton:) forControlEvents:UIControlEventTouchUpInside];

// Add cell
[self addSubview:cell];

// Add to DataArray & isClickedArray
[self.isClickedArray addObject:[NSNumber numberWithBool:NO]];
[self.dataArray addObject:cell];

// Calculate totalHeight
totalHeight += kCCHeaderHeight + kCCPad;
}

// Makes scrollview certainly scrollable
totalHeight = (totalHeight > self.frame.size.height) ? totalHeight : self.frame.size.height + 1;

// Set self's ContentSize and ContentOffset
[self setContentSize:CGSizeMake(self.frame.size.width, totalHeight)];
[self setContentOffset:CGPointZero];
}



#pragma mark - Reposition Cells
-(void)repositionCollapseClickCellsBelowIndex:(int)index withOffset:(float)offset {
for (int yy = index+1; yy < self.dataArray.count; yy++) {
CollapseClickCell *cell = [self.dataArray objectAtIndex:yy];
cell.frame = CGRectMake(cell.frame.origin.x, cell.frame.origin.y + offset, cell.frame.size.width, cell.frame.size.height);
}

// Resize self.ContentSize
CollapseClickCell *lastCell = [self.dataArray objectAtIndex:self.dataArray.count - 1];

// Makes scrollview certainly scrollable
CGFloat totalHeight = lastCell.frame.origin.y + lastCell.frame.size.height + kCCPad;
totalHeight = (totalHeight > self.frame.size.height) ? totalHeight : self.frame.size.height + 1;
[self setContentSize:CGSizeMake(self.frame.size.width, totalHeight)];
}


#pragma mark - Did Click
-(void)didSelectCollapseClickButton:(UIButton *)titleButton {
BOOL isOpen = NO;

// Cell is OPEN -> CLOSED
if ([[self.isClickedArray objectAtIndex:titleButton.tag] boolValue] == YES) {
[self closeCollapseClickCellAtIndex:titleButton.tag animated:YES];
}
// Cell is CLOSED -> OPEN
else {
[self openCollapseClickCellAtIndex:titleButton.tag animated:YES];
isOpen = YES;
}

// Call delegate method
if ([(id)CollapseClickDelegate respondsToSelector:@selector(didClickCollapseClickCellAtIndex:isNowOpen:)]) {
[CollapseClickDelegate didClickCollapseClickCellAtIndex:titleButton.tag isNowOpen:isOpen];
}
}

#pragma mark - Open CollapseClickCell
-(void)openCollapseClickCellAtIndex:(int)index animated:(BOOL)animated {
// Check if it's not open first
if ([[self.isClickedArray objectAtIndex:index] boolValue] != YES) {
float duration = 0;
if (animated) {
duration = 0.25;
}
[UIView animateWithDuration:duration animations:^{
// Resize Cell
CollapseClickCell *cell = [self.dataArray objectAtIndex:index];
cell.frame = CGRectMake(cell.frame.origin.x, cell.frame.origin.y, cell.frame.size.width, cell.ContentView.frame.origin.y + cell.ContentView.frame.size.height + kCCPad);

// Change Arrow orientation
CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI/2);
cell.TitleArrow.transform = transform;

// Change isClickedArray
[self.isClickedArray replaceObjectAtIndex:index withObject:[NSNumber numberWithBool:YES]];

// Reposition all CollapseClickCells below Cell
[self repositionCollapseClickCellsBelowIndex:index withOffset:cell.ContentView.frame.size.height + kCCPad];
}];
}
}

-(void)openCollapseClickCellsWithIndexes:(NSArray *)indexArray animated:(BOOL)animated {
// This works off of NSNumbers for each Index
for (int ii = 0; ii < indexArray.count; ii++) {
id indexID = indexArray[ii];
if ([indexID isKindOfClass:[NSNumber class]]) {
[self openCollapseClickCellAtIndex:[indexID intValue] animated:animated];
}
}
}

#pragma mark - Close CollapseClickCell
-(void)closeCollapseClickCellAtIndex:(int)index animated:(BOOL)animated {
// Check if it's open first
if ([[self.isClickedArray objectAtIndex:index] boolValue] == YES) {
float duration = 0;
if (animated) {
duration = 0.25;
}
[UIView animateWithDuration:duration animations:^{
// Resize Cell
CollapseClickCell *cell = [self.dataArray objectAtIndex:index];
cell.frame = CGRectMake(cell.frame.origin.x, cell.frame.origin.y, cell.frame.size.width, kCCHeaderHeight);

// Change Arrow orientation
CGAffineTransform transform = CGAffineTransformMakeRotation(0);
cell.TitleArrow.transform = transform;

// Change isClickedArray
[self.isClickedArray replaceObjectAtIndex:index withObject:[NSNumber numberWithBool:NO]];

// Reposition all CollapseClickCells below Cell
[self repositionCollapseClickCellsBelowIndex:index withOffset:-1*(cell.ContentView.frame.size.height + kCCPad)];
}];
}
}

-(void)closeCollapseClickCellsWithIndexes:(NSArray *)indexArray animated:(BOOL)animated {
// This works off of NSNumbers for each Index
for (int ii = 0; ii < indexArray.count; ii++) {
id indexID = indexArray[ii];
if ([indexID isKindOfClass:[NSNumber class]]) {
[self closeCollapseClickCellAtIndex:[indexID intValue] animated:animated];
}
}
}


#pragma mark - CollapseClickCell for Index
-(CollapseClickCell *)collapseClickCellForIndex:(int)index {
if ([[self.dataArray objectAtIndex:index] isKindOfClass:[CollapseClickCell class]]) {
return [self.dataArray objectAtIndex:index];
}

return nil;
}


#pragma mark - Scroll To Cell
-(void)scrollToCollapseClickCellAtIndex:(int)index animated:(BOOL)animated {
CollapseClickCell *cell = [self.dataArray objectAtIndex:index];
[self setContentOffset:CGPointMake(cell.frame.origin.x, cell.frame.origin.y) animated:animated];
}


#pragma mark - Content View for Cell
-(UIView *)contentViewForCellAtIndex:(int)index {
CollapseClickCell *cell = [self.subviews objectAtIndex:index];
return cell.ContentView;
}



@end
17 changes: 17 additions & 0 deletions EditedPods/CollapseClick/CollapseClick/CollapseClickArrow.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
//
// CollapseClickIcon.h
// CollapseClick
//
// Created by Ben Gordon on 3/17/13.
// Copyright (c) 2013 Ben Gordon. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface CollapseClickArrow : UIView

@property (nonatomic,retain) UIColor *arrowColor;

-(void)drawWithColor:(UIColor *)color;

@end
40 changes: 40 additions & 0 deletions EditedPods/CollapseClick/CollapseClick/CollapseClickArrow.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
//
// CollapseClickIcon.m
// CollapseClick
//
// Created by Ben Gordon on 3/17/13.
// Copyright (c) 2013 Ben Gordon. All rights reserved.
//

#import "CollapseClickArrow.h"

@implementation CollapseClickArrow

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
self.arrowColor = [UIColor whiteColor];
}
return self;
}

-(void)drawWithColor:(UIColor *)color {
self.arrowColor = color;
[self setNeedsDisplay];
}

- (void)drawRect:(CGRect)rect
{
UIBezierPath *arrow = [UIBezierPath bezierPath];
[self.arrowColor setFill];
[arrow moveToPoint:CGPointMake(self.frame.size.width, self.frame.size.height/2)];
[arrow addLineToPoint:CGPointMake(0, self.frame.size.height)];
[arrow addLineToPoint:CGPointMake(0, 0)];
[arrow addLineToPoint:CGPointMake(self.frame.size.width, self.frame.size.height/2)];
[arrow fill];
}


@end
Loading

0 comments on commit 4a5d245

Please sign in to comment.