Skip to content
This repository has been archived by the owner on Jul 12, 2019. It is now read-only.

Commit

Permalink
Cleaned Code
Browse files Browse the repository at this point in the history
  • Loading branch information
Vladislav Alekseev committed Jan 28, 2013
1 parent 91d4bdb commit 8a7579c
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 70 deletions.
19 changes: 1 addition & 18 deletions AKSegmentedControl/AKSegmentedControl.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,30 +35,13 @@ typedef enum : NSUInteger

@interface AKSegmentedControl : UIControl

/**
*/
@property (nonatomic, strong) NSArray *buttonsArray;

/**
*/
@property (nonatomic, strong) UIImage *backgroundImage;

/**
*/
@property (nonatomic, strong) UIImage *separatorImage;

/**
*/
@property (nonatomic, assign) UIEdgeInsets contentEdgeInsets;

/**
*/
@property (nonatomic, assign) AKSegmentedControlMode segmentedControlMode;
@property (nonatomic, strong, readonly) NSIndexSet *selectedIndeces;

- (void)selectItemsWithIndexSet:(NSIndexSet *)indexSet byExpandingSelection:(BOOL)expandSelection;

/**
*/
@property (nonatomic, assign) AKSegmentedControlMode segmentedControlMode;

@end
92 changes: 40 additions & 52 deletions AKSegmentedControl/AKSegmentedControl.m
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,13 @@

@interface AKSegmentedControl ()

@property (nonatomic, strong) NSMutableArray *separatorsArray;
@property (nonatomic, strong) NSMutableIndexSet *mutableIndexSet;
@property (nonatomic, strong) UIImageView *backgroundImageView;

@end

@implementation AKSegmentedControl
{
NSMutableArray *separatorsArray;
UIImageView *backgroundImageView;
}

#pragma mark - Init and Dealloc

Expand All @@ -45,17 +43,13 @@ - (id)initWithFrame:(CGRect)frame
if (!self) return nil;

_mutableIndexSet = [[NSMutableIndexSet alloc] init];
_separatorsArray = [NSMutableArray array];

[self setContentEdgeInsets:UIEdgeInsetsZero];
[self selectItemsWithIndexSet:[NSIndexSet indexSetWithIndex:0] byExpandingSelection:NO];
[self setSegmentedControlMode:AKSegmentedControlModeSticky];
[self setButtonsArray:[NSMutableArray array]];
separatorsArray = [NSMutableArray array];

backgroundImageView = [[UIImageView alloc] initWithFrame:self.bounds];
[backgroundImageView setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
_contentEdgeInsets = UIEdgeInsetsZero;
_segmentedControlMode = AKSegmentedControlModeSticky;
_buttonsArray = [[NSArray alloc] init];

[self addSubview:backgroundImageView];
[self addSubview:self.backgroundImageView];

return self;
}
Expand All @@ -64,12 +58,12 @@ - (id)initWithFrame:(CGRect)frame

- (void)layoutSubviews
{
CGRect contentRect = UIEdgeInsetsInsetRect(self.bounds, _contentEdgeInsets);
CGRect contentRect = UIEdgeInsetsInsetRect(self.bounds, self.contentEdgeInsets);

NSUInteger buttonsCount = [_buttonsArray count];
NSUInteger buttonsCount = self.buttonsArray.count;
NSUInteger separtorsNumber = buttonsCount - 1;

CGFloat separatorWidth = (_separatorImage != nil) ? _separatorImage.size.width : kAKButtonSeparatorWidth;
CGFloat separatorWidth = (self.separatorImage != nil) ? self.separatorImage.size.width : kAKButtonSeparatorWidth;
CGFloat buttonWidth = floorf((CGRectGetWidth(contentRect) - (separtorsNumber * separatorWidth)) / buttonsCount);
CGFloat buttonHeight = CGRectGetHeight(contentRect);
CGSize buttonSize = CGSizeMake(buttonWidth, buttonHeight);
Expand All @@ -82,7 +76,7 @@ - (void)layoutSubviews

NSUInteger increment = 0;

for (UIButton *button in _buttonsArray)
for (UIButton *button in self.buttonsArray)
{
dButtonWidth = buttonSize.width;

Expand All @@ -98,11 +92,11 @@ - (void)layoutSubviews

if (increment < separtorsNumber)
{
UIImageView *separatorImageView = separatorsArray[increment];
UIImageView *separatorImageView = self.separatorsArray[increment];
[separatorImageView setFrame:CGRectMake(CGRectGetMaxX(button.frame),
offsetY,
separatorWidth,
CGRectGetHeight(self.bounds) - _contentEdgeInsets.top - _contentEdgeInsets.bottom)];
CGRectGetHeight(self.bounds) - self.contentEdgeInsets.top - self.contentEdgeInsets.bottom)];
}

increment++;
Expand Down Expand Up @@ -155,16 +149,13 @@ - (NSIndexSet *)selectedIndeces {
- (void)setBackgroundImage:(UIImage *)backgroundImage
{
_backgroundImage = backgroundImage;
[backgroundImageView setImage:_backgroundImage];
[self.backgroundImageView setImage:_backgroundImage];
}

- (void)setButtonsArray:(NSArray *)buttonsArray
{
[_buttonsArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[(UIButton *)obj removeFromSuperview];
}];

[separatorsArray removeAllObjects];
[_buttonsArray makeObjectsPerformSelector:@selector(removeFromSuperview)];
[self.separatorsArray removeAllObjects];

_buttonsArray = buttonsArray;

Expand All @@ -174,41 +165,33 @@ - (void)setButtonsArray:(NSArray *)buttonsArray
[(UIButton *)obj setTag:idx];
}];

[self setSeparatorImage:_separatorImage];
[self setSegmentedControlMode:_segmentedControlMode];
[self rebuildSeparators];
[self updateButtons];
}

- (void)setSeparatorImage:(UIImage *)separatorImage
{
[separatorsArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[(UIImageView *)obj removeFromSuperview];
}];

_separatorImage = separatorImage;
[self rebuildSeparators];
}

- (void)rebuildSeparators {
[self.separatorsArray makeObjectsPerformSelector:@selector(removeFromSuperview)];

NSUInteger separatorsNumber = [_buttonsArray count] - 1;
NSUInteger separatorsNumber = [self.buttonsArray count] - 1;

[_buttonsArray enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if (idx < separatorsNumber)
{
UIImageView *separatorImageView = [[UIImageView alloc] initWithImage:_separatorImage];
[self addSubview:separatorImageView];
[separatorsArray addObject:separatorImageView];
}
}];
[self.buttonsArray enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if (idx < separatorsNumber) {
UIImageView *separatorImageView = [[UIImageView alloc] initWithImage:self.separatorImage];
[self addSubview:separatorImageView];
[self.separatorsArray addObject:separatorImageView];
}
}];
}

- (void)setSegmentedControlMode:(AKSegmentedControlMode)segmentedControlMode
{
_segmentedControlMode = segmentedControlMode;

if ([_buttonsArray count] == 0) return;

if (_segmentedControlMode == AKSegmentedControlModeButton) {
[_buttonsArray makeObjectsPerformSelector:@selector(setSelected:) withObject:nil];
}

[self updateButtons];
}

Expand All @@ -221,14 +204,19 @@ - (void)selectItemsWithIndexSet:(NSIndexSet *)indexSet byExpandingSelection:(BOO
[self updateButtons];
}

- (void)updateButtons {
if (_buttonsArray.count == 0) {
return;
- (UIImageView *)backgroundImageView {
if (_backgroundImageView == nil) {
_backgroundImageView = [[UIImageView alloc] initWithFrame:self.bounds];
[_backgroundImageView setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
}
[_buttonsArray makeObjectsPerformSelector:@selector(setSelected:) withObject:nil];
return _backgroundImageView;
}

- (void)updateButtons {
[self.buttonsArray makeObjectsPerformSelector:@selector(setSelected:) withObject:nil];
[self.selectedIndeces enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) {
if (self.segmentedControlMode != AKSegmentedControlModeButton) {
UIButton *button = _buttonsArray[idx];
UIButton *button = self.buttonsArray[idx];
button.selected = YES;
}
}];
Expand Down

0 comments on commit 8a7579c

Please sign in to comment.