Skip to content

Commit a4b9b57

Browse files
committed
Removed overly complex transformation logic
1 parent bf2cafe commit a4b9b57

1 file changed

Lines changed: 16 additions & 37 deletions

File tree

TOSegmentedControl/TOSegmentedControl.m

Lines changed: 16 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -516,21 +516,18 @@ - (void)layoutItemViews
516516
UIView *itemView = item.itemView;
517517
[self.trackView addSubview:itemView];
518518

519-
// Size to fit
520-
[itemView sizeToFit];
521-
522-
// Make sure they are all unselected
523-
[self setItemAtIndex:i selected:NO];
524-
525519
// Lay out the frame
526520
CGRect thumbFrame = [self frameForSegmentAtIndex:i];
527521
itemView.center = (CGPoint){CGRectGetMidX(thumbFrame),
528522
CGRectGetMidY(thumbFrame)};
529523
itemView.frame = CGRectIntegral(itemView.frame);
530524

525+
// Make sure they are all unselected
526+
[self setItemAtIndex:i selected:NO];
527+
531528
// If the item is disabled, make it faded
532529
if (!self.enabled || item.isDisabled) {
533-
itemView.alpha = kTOSegmentedControlDisabledAlpha;
530+
itemView.alpha = kTOSegmentedControlDisabledAlpha;
534531
}
535532

536533
i++;
@@ -686,7 +683,6 @@ - (void)setItemAtIndex:(NSInteger)index selected:(BOOL)selected
686683

687684
// Tell the segment to select itself in order to show the reversible arrow
688685
TOSegmentedControlSegment *segment = self.segments[index];
689-
if (segment.isSelected == selected) { return; }
690686

691687
// Update the segment state
692688
segment.isSelected = selected;
@@ -699,37 +695,15 @@ - (void)setItemAtIndex:(NSInteger)index selected:(BOOL)selected
699695
UILabel *label = segment.label;
700696
if (label == nil) { return; }
701697

702-
[UIView performWithoutAnimation:^{
703-
// Capture its current position and scale
704-
CGPoint center = label.center;
705-
CGAffineTransform transform = label.transform;
706-
707-
// Reset its transform so we don't mangle the frame
708-
label.transform = CGAffineTransformIdentity;
709-
710-
// Set the font
711-
UIFont *font = selected ? self.selectedTextFont : self.textFont;
712-
label.font = font;
698+
// Set the font
699+
UIFont *font = selected ? self.selectedTextFont : self.textFont;
700+
label.font = font;
713701

714-
// Resize the frame in case the new font exceeded the bounds
715-
[label sizeToFit];
716-
label.frame = CGRectIntegral(label.frame);
702+
// Re-apply the arrow image view to the translated frame
703+
segment.arrowView.frame = [self frameForImageArrowViewWithItemFrame:label.frame];
717704

718-
// Re-apply the arrow image view to the translated frame
719-
if (selected) {
720-
CGAffineTransform transform = segment.arrowView.transform;
721-
segment.arrowView.transform = CGAffineTransformIdentity;
722-
segment.arrowView.frame = [self frameForImageArrowViewWithItemFrame:label.frame];
723-
segment.arrowView.transform = transform;
724-
}
725-
726-
// Ensure the arrow view is set to the right orientation
727-
[segment setArrowImageReversed:segment.isReversed];
728-
729-
// Re-apply the transform and the positioning
730-
label.transform = transform;
731-
label.center = center;
732-
}];
705+
// Ensure the arrow view is set to the right orientation
706+
[segment setArrowImageReversed:segment.isReversed];
733707
}
734708

735709
- (void)setItemAtIndex:(NSInteger)index faded:(BOOL)faded
@@ -1262,6 +1236,11 @@ - (void)setSelectedTextFont:(UIFont *)selectedTextFont
12621236
if (_selectedTextFont == nil) {
12631237
_selectedTextFont = [UIFont systemFontOfSize:13.0f weight:UIFontWeightSemibold];
12641238
}
1239+
1240+
// Set each item to adopt the new font
1241+
for (TOSegmentedControlSegment *item in self.segments) {
1242+
[item refreshItemView];
1243+
}
12651244
}
12661245

12671246
// -----------------------------------------------

0 commit comments

Comments
 (0)