forked from iSCAU/iSCAU-iOS
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 4a5d245
Showing
380 changed files
with
30,944 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
Podfile.* | ||
resource/* | ||
iSCAU/Vendor/Reveal* | ||
build/* | ||
Pods/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
17
EditedPods/CollapseClick/CollapseClick/CollapseClickArrow.h
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
40
EditedPods/CollapseClick/CollapseClick/CollapseClickArrow.m
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
Oops, something went wrong.