Skip to content

Commit

Permalink
Some changes for iOS5 compatibility.
Browse files Browse the repository at this point in the history
  • Loading branch information
Robert Chin committed Sep 21, 2011
1 parent 4263d3e commit 1886206
Show file tree
Hide file tree
Showing 17 changed files with 154 additions and 301 deletions.
1 change: 1 addition & 0 deletions Classes/RCSwitch.h
Expand Up @@ -36,6 +36,7 @@
float percent, oldPercent;
float knobWidth;
float endcapWidth;
float drawHeight;
CGPoint startPoint;

CGSize lastBoundsSize;
Expand Down
64 changes: 36 additions & 28 deletions Classes/RCSwitch.m
Expand Up @@ -33,27 +33,27 @@ @implementation RCSwitch
- (void)initCommon
{
self.contentMode = UIViewContentModeRedraw;
[self setKnobWidth:44];
[self setKnobWidth:30];
[self regenerateImages];
sliderOff = [[[UIImage imageNamed:@"btn_slider_off.png"] stretchableImageWithLeftCapWidth:10.0
drawHeight = 28;
sliderOff = [[[UIImage imageNamed:@"btn_slider_off.png"] stretchableImageWithLeftCapWidth:20.0
topCapHeight:0.0] retain];
self.opaque = NO;
}

- (id)initWithFrame:(CGRect)aRect
{
if((self = [super initWithFrame:aRect])){
[self initCommon];
[self initCommon];
}
return self;
}

- (id)initWithCoder:(NSCoder *)aDecoder
{
if((self = [super initWithCoder:aDecoder])){
[self initCommon];
percent = 1.0;
[self initCommon];
}
return self;
}
Expand All @@ -77,7 +77,7 @@ - (void)setKnobWidth:(float)aFloat
UIImage *knobImageStretch = [knobTmpImage stretchableImageWithLeftCapWidth:knobTmpImage.size.width / 2.0
topCapHeight:0.0];
CGRect knobRect = CGRectMake(0, 0, knobWidth, [knobImageStretch size].height);
UIGraphicsBeginImageContext(knobRect.size);
UIGraphicsBeginImageContextWithOptions(knobRect.size, NO, [knobTmpImage scale]);
[knobImageStretch drawInRect:knobRect];
[knobImage release];
knobImage = [UIGraphicsGetImageFromCurrentImageContext() retain];
Expand All @@ -89,7 +89,7 @@ - (void)setKnobWidth:(float)aFloat
UIImage *knobImageStretch = [knobTmpImage stretchableImageWithLeftCapWidth:knobTmpImage.size.width / 2.0
topCapHeight:0.0];
CGRect knobRect = CGRectMake(0, 0, knobWidth, [knobImageStretch size].height);
UIGraphicsBeginImageContext(knobRect.size);
UIGraphicsBeginImageContextWithOptions(knobRect.size, NO, [knobTmpImage scale]);
[knobImageStretch drawInRect:knobRect];
[knobImagePressed release];
knobImagePressed = [UIGraphicsGetImageFromCurrentImageContext() retain];
Expand All @@ -105,11 +105,11 @@ - (float)knobWidth
- (void)regenerateImages
{
CGRect boundsRect = self.bounds;
UIImage *sliderOnBase = [[UIImage imageNamed:@"btn_slider_on.png"] stretchableImageWithLeftCapWidth:10.0
UIImage *sliderOnBase = [[UIImage imageNamed:@"btn_slider_on.png"] stretchableImageWithLeftCapWidth:20.0
topCapHeight:0.0];
CGRect sliderOnRect = boundsRect;
sliderOnRect.size.height = [sliderOnBase size].height;
UIGraphicsBeginImageContext(sliderOnRect.size);
UIGraphicsBeginImageContextWithOptions(sliderOnRect.size, NO, [sliderOnBase scale]);
[sliderOnBase drawInRect:sliderOnRect];
[sliderOn release];
sliderOn = [UIGraphicsGetImageFromCurrentImageContext() retain];
Expand All @@ -136,7 +136,7 @@ - (void)regenerateImages
topCapHeight:0.0];
CGRect sliderOnRect = boundsRect;
sliderOnRect.size.height = [buttonEndTrackBase size].height;
UIGraphicsBeginImageContext(sliderOnRect.size);
UIGraphicsBeginImageContextWithOptions(sliderOnRect.size, NO, [buttonTmpImage scale]);
[buttonEndTrackBase drawInRect:sliderOnRect];
[buttonEndTrack release];
buttonEndTrack = [UIGraphicsGetImageFromCurrentImageContext() retain];
Expand All @@ -149,7 +149,7 @@ - (void)regenerateImages
topCapHeight:0.0];
CGRect sliderOnRect = boundsRect;
sliderOnRect.size.height = [buttonEndTrackBase size].height;
UIGraphicsBeginImageContext(sliderOnRect.size);
UIGraphicsBeginImageContextWithOptions(sliderOnRect.size, NO, [buttonTmpImage scale]);
[buttonEndTrackBase drawInRect:sliderOnRect];
[buttonEndTrackPressed release];
buttonEndTrackPressed = [UIGraphicsGetImageFromCurrentImageContext() retain];
Expand All @@ -166,6 +166,7 @@ - (void)drawUnderlayersInRect:(CGRect)aRect withOffset:(float)offset inTrackWidt
- (void)drawRect:(CGRect)rect
{
CGRect boundsRect = self.bounds;
boundsRect.size.height = drawHeight;
if(!CGSizeEqualToSize(boundsRect.size, lastBoundsSize)){
[self regenerateImages];
lastBoundsSize = boundsRect.size;
Expand Down Expand Up @@ -197,7 +198,7 @@ - (void)drawRect:(CGRect)rect
{
CGContextSaveGState(context);
UIGraphicsPushContext(context);

if(drawPercent == 0.0){
CGRect insetClipRect = boundsRect;
insetClipRect.origin.x += endcapWidth;
Expand All @@ -210,20 +211,21 @@ - (void)drawRect:(CGRect)rect
insetClipRect.size.width -= endcapWidth;
UIRectClip(insetClipRect);
}

{
CGRect sliderOffRect = boundsRect;
sliderOffRect.size.height = [sliderOff size].height;
[sliderOff drawInRect:sliderOffRect];
}

if(drawPercent > 0.0){
float onWidth = 3 + (width - knobWidth + 3) * drawPercent;
CGRect drawOnRect = CGRectMake(0, 0, onWidth, [sliderOn size].height);
float scale = [sliderOn scale];
float onWidth = 3 + (width - knobWidth / 2) * drawPercent;
CGRect drawOnRect = CGRectMake(0, 0, onWidth * scale, [sliderOn size].height * scale);
CGImageRef sliderOnSubImage = CGImageCreateWithImageInRect([sliderOn CGImage], drawOnRect);
CGContextSaveGState(context);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextTranslateCTM(context, 0.0, -boundsRect.size.height - 1.0);
CGContextScaleCTM(context, 1.0 / scale, -1.0 / scale);
CGContextTranslateCTM(context, 0.0, -drawOnRect.size.height);
CGContextDrawImage(context, drawOnRect, sliderOnSubImage);
CGContextRestoreGState(context);
CGImageRelease(sliderOnSubImage);
Expand All @@ -232,7 +234,7 @@ - (void)drawRect:(CGRect)rect
{
CGContextSaveGState(context);
UIGraphicsPushContext(context);
CGRect insetClipRect = CGRectInset(boundsRect, 4, 4);
CGRect insetClipRect = CGRectInset(boundsRect, 2, 2);
UIRectClip(insetClipRect);
[self drawUnderlayersInRect:rect
withOffset:drawPercent * (boundsRect.size.width - knobWidth)
Expand All @@ -243,23 +245,25 @@ - (void)drawRect:(CGRect)rect

{
CGContextScaleCTM(context, 1.0, -1.0);
CGContextTranslateCTM(context, 0.0, -boundsRect.size.height + 1.0);
CGContextTranslateCTM(context, 0.0, -boundsRect.size.height);
CGPoint location = boundsRect.origin;
CGRect drawOnRect = CGRectMake(location.x - 1 + roundf(drawPercent * (boundsRect.size.width - knobWidth + 2)),
location.y, knobWidth, [knobImage size].height);
location.y + 1.5, knobWidth, [knobImage size].height);
if(self.highlighted)
CGContextDrawImage(context, drawOnRect, [knobImagePressed CGImage]);
else
CGContextDrawImage(context, drawOnRect, [knobImage CGImage]);
}

UIGraphicsPopContext();
CGContextRestoreGState(context);
}

if(drawPercent == 0.0 || drawPercent == 1.0){
float scale = [buttonEndTrack scale];
CGContextSaveGState(context);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextTranslateCTM(context, 0.0, -boundsRect.size.height - 1.0);
CGContextScaleCTM(context, 1.0 / scale, -1.0 / scale);
CGContextTranslateCTM(context, 0.0, -boundsRect.size.height * scale);

UIImage *buttonTrackDrawImage;
if(self.highlighted)
Expand All @@ -268,16 +272,20 @@ - (void)drawRect:(CGRect)rect
buttonTrackDrawImage = buttonEndTrack;

if(drawPercent == 0.0){
CGRect drawOnRect = CGRectMake(0, 0, endcapWidth, [buttonTrackDrawImage size].height);
CGRect drawOnRect = CGRectMake(0, 0, endcapWidth * scale, [buttonTrackDrawImage size].height * scale);
CGImageRef buttonTrackSubImage = CGImageCreateWithImageInRect([buttonTrackDrawImage CGImage], drawOnRect);
CGContextDrawImage(context, drawOnRect, buttonTrackSubImage);
CGRect drawIntoRect = drawOnRect;
drawIntoRect.origin.y = 2;
CGContextDrawImage(context, drawIntoRect, buttonTrackSubImage);
CGImageRelease(buttonTrackSubImage);
}

if(drawPercent == 1.0){
CGRect drawOnRect = CGRectMake(boundsRect.size.width - endcapWidth, 0, endcapWidth, [buttonTrackDrawImage size].height);
CGRect drawOnRect = CGRectMake((boundsRect.size.width - endcapWidth) * scale, 0, endcapWidth * scale, [buttonTrackDrawImage size].height * scale);
CGImageRef buttonTrackSubImage = CGImageCreateWithImageInRect([buttonTrackDrawImage CGImage], drawOnRect);
CGContextDrawImage(context, drawOnRect, buttonTrackSubImage);
CGRect drawIntoRect = drawOnRect;
drawIntoRect.origin.y = 2;
CGContextDrawImage(context, drawIntoRect, buttonTrackSubImage);
CGImageRelease(buttonTrackSubImage);
}

Expand Down
9 changes: 5 additions & 4 deletions Classes/RCSwitchOnOff.m
Expand Up @@ -31,13 +31,14 @@ - (void)initCommon
onText = [UILabel new];
onText.text = NSLocalizedString(@"ON", @"Switch localized string");
onText.textColor = [UIColor whiteColor];
onText.font = [UIFont boldSystemFontOfSize:17];
onText.shadowColor = [UIColor colorWithWhite:0.175 alpha:1.0];
onText.font = [UIFont boldSystemFontOfSize:16];
onText.shadowColor = [UIColor colorWithWhite:0.35 alpha:1.0];
onText.shadowOffset = CGSizeMake(0.0, -0.5);

offText = [UILabel new];
offText.text = NSLocalizedString(@"OFF", @"Switch localized string");
offText.textColor = [UIColor grayColor];
offText.font = [UIFont boldSystemFontOfSize:17];
offText.font = [UIFont boldSystemFontOfSize:16];
}

- (void)dealloc
Expand All @@ -57,7 +58,7 @@ - (void)drawUnderlayersInRect:(CGRect)aRect withOffset:(float)offset inTrackWidt

{
CGRect textRect = aRect;
textRect.origin.x += (offset + trackWidth);
textRect.origin.x += (offset + trackWidth) - 14;
[offText drawTextInRect:textRect];
}
}
Expand Down

0 comments on commit 1886206

Please sign in to comment.