From 778585dfce9da6303a2e7dd63d9fd9651eee19c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jason=20Zhou=20=E5=91=A8=E6=AD=A3=E6=98=8C?= Date: Tue, 5 Aug 2014 09:42:02 +0800 Subject: [PATCH 1/3] fix the obj leak fix bug and add a fast iOS7 style button. --- .../project.pbxproj | 22 ++-- .../contents.xcworkspacedata | 7 ++ .../UserInterfaceState.xcuserstate | Bin 0 -> 17660 bytes .../xcschemes/Circle Button Demo.xcscheme | 96 ++++++++++++++++++ .../xcschemes/xcschememanagement.plist | 27 +++++ .../DKCircleButton/DKCircleButton.h | 11 ++ .../DKCircleButton/DKCircleButton.m | 34 +++++++ 7 files changed, 191 insertions(+), 6 deletions(-) create mode 100644 Example/Circle Button Demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Example/Circle Button Demo.xcodeproj/project.xcworkspace/xcuserdata/Jason.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 Example/Circle Button Demo.xcodeproj/xcuserdata/Jason.xcuserdatad/xcschemes/Circle Button Demo.xcscheme create mode 100644 Example/Circle Button Demo.xcodeproj/xcuserdata/Jason.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/Example/Circle Button Demo.xcodeproj/project.pbxproj b/Example/Circle Button Demo.xcodeproj/project.pbxproj index 488aa43..8141241 100644 --- a/Example/Circle Button Demo.xcodeproj/project.pbxproj +++ b/Example/Circle Button Demo.xcodeproj/project.pbxproj @@ -19,7 +19,7 @@ 02752159191530B6004C3D82 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 02752141191530B6004C3D82 /* UIKit.framework */; }; 02752161191530B6004C3D82 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0275215F191530B6004C3D82 /* InfoPlist.strings */; }; 02752163191530B6004C3D82 /* Circle_Button_DemoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 02752162191530B6004C3D82 /* Circle_Button_DemoTests.m */; }; - 0275216F191530F7004C3D82 /* DKCircleButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 0275216E191530F7004C3D82 /* DKCircleButton.m */; }; + 96DDD625198B983100F3D950 /* DKCircleButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 96DDD624198B983100F3D950 /* DKCircleButton.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -49,8 +49,8 @@ 0275215E191530B6004C3D82 /* Circle Button DemoTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Circle Button DemoTests-Info.plist"; sourceTree = ""; }; 02752160191530B6004C3D82 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 02752162191530B6004C3D82 /* Circle_Button_DemoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Circle_Button_DemoTests.m; sourceTree = ""; }; - 0275216D191530F7004C3D82 /* DKCircleButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DKCircleButton.h; sourceTree = ""; }; - 0275216E191530F7004C3D82 /* DKCircleButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DKCircleButton.m; sourceTree = ""; }; + 96DDD623198B983100F3D950 /* DKCircleButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DKCircleButton.h; sourceTree = ""; }; + 96DDD624198B983100F3D950 /* DKCircleButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DKCircleButton.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -151,8 +151,16 @@ 0275216C191530F7004C3D82 /* DKCircleButton */ = { isa = PBXGroup; children = ( - 0275216D191530F7004C3D82 /* DKCircleButton.h */, - 0275216E191530F7004C3D82 /* DKCircleButton.m */, + 96DDD622198B983100F3D950 /* DKCircleButton */, + ); + path = DKCircleButton; + sourceTree = ""; + }; + 96DDD622198B983100F3D950 /* DKCircleButton */ = { + isa = PBXGroup; + children = ( + 96DDD623198B983100F3D950 /* DKCircleButton.h */, + 96DDD624198B983100F3D950 /* DKCircleButton.m */, ); path = DKCircleButton; sourceTree = ""; @@ -254,7 +262,7 @@ buildActionMask = 2147483647; files = ( 0275214A191530B6004C3D82 /* main.m in Sources */, - 0275216F191530F7004C3D82 /* DKCircleButton.m in Sources */, + 96DDD625198B983100F3D950 /* DKCircleButton.m in Sources */, 0275214E191530B6004C3D82 /* DKAppDelegate.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -452,6 +460,7 @@ 02752168191530B6004C3D82 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; 02752169191530B6004C3D82 /* Build configuration list for PBXNativeTarget "Circle Button DemoTests" */ = { isa = XCConfigurationList; @@ -460,6 +469,7 @@ 0275216B191530B6004C3D82 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; diff --git a/Example/Circle Button Demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Example/Circle Button Demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..0f109d7 --- /dev/null +++ b/Example/Circle Button Demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Example/Circle Button Demo.xcodeproj/project.xcworkspace/xcuserdata/Jason.xcuserdatad/UserInterfaceState.xcuserstate b/Example/Circle Button Demo.xcodeproj/project.xcworkspace/xcuserdata/Jason.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..0c7fe01fdee8f1822c2442fff3c2362c53c2d558 GIT binary patch literal 17660 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 z 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 PDd8`>!Yd?3d9VE+9EK7N literal 0 HcmV?d00001 diff --git a/Example/Circle Button Demo.xcodeproj/xcuserdata/Jason.xcuserdatad/xcschemes/Circle Button Demo.xcscheme b/Example/Circle Button Demo.xcodeproj/xcuserdata/Jason.xcuserdatad/xcschemes/Circle Button Demo.xcscheme new file mode 100644 index 0000000..58411db --- /dev/null +++ b/Example/Circle Button Demo.xcodeproj/xcuserdata/Jason.xcuserdatad/xcschemes/Circle Button Demo.xcscheme @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/Circle Button Demo.xcodeproj/xcuserdata/Jason.xcuserdatad/xcschemes/xcschememanagement.plist b/Example/Circle Button Demo.xcodeproj/xcuserdata/Jason.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..3783188 --- /dev/null +++ b/Example/Circle Button Demo.xcodeproj/xcuserdata/Jason.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,27 @@ + + + + + SchemeUserState + + Circle Button Demo.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 02752139191530B6004C3D82 + + primary + + + 02752154191530B6004C3D82 + + primary + + + + + diff --git a/Example/Circle Button Demo/DKCircleButton/DKCircleButton.h b/Example/Circle Button Demo/DKCircleButton/DKCircleButton.h index 4484e78..49c622d 100644 --- a/Example/Circle Button Demo/DKCircleButton/DKCircleButton.h +++ b/Example/Circle Button Demo/DKCircleButton/DKCircleButton.h @@ -19,4 +19,15 @@ - (void)setImage:(UIImage *)image animated: (BOOL)animated; +/** + * fast creation + */ ++ (id)circleButtonWithSize:(CGSize)size borderSize:(CGFloat)borderSize normalTitle:(NSString *)title addTarget:(id)target action:(SEL)action animated:(BOOL)animated; + +/// + +- (void)selectedWithAnimation:(BOOL)animation; + +- (void)deselected; + @end diff --git a/Example/Circle Button Demo/DKCircleButton/DKCircleButton.m b/Example/Circle Button Demo/DKCircleButton/DKCircleButton.m index 99f0a82..00edae3 100644 --- a/Example/Circle Button Demo/DKCircleButton/DKCircleButton.m +++ b/Example/Circle Button Demo/DKCircleButton/DKCircleButton.m @@ -103,6 +103,9 @@ - (void)updateMaskToBounds:(CGRect)maskBounds { maskLayer.bounds = maskBounds; maskLayer.path = maskPath; + + CGPathRelease(maskPath); + maskLayer.fillColor = [UIColor blackColor].CGColor; CGPoint point = CGPointMake(maskBounds.size.width/2, maskBounds.size.height/2); @@ -115,6 +118,7 @@ - (void)updateMaskToBounds:(CGRect)maskBounds { self.layer.borderWidth = self.borderSize; self.highLightView.frame = self.bounds; + } - (void)blink { @@ -226,4 +230,34 @@ - (void)setImage:(UIImage *)image animated: (BOOL)animated { } } +///************************************** fast creation ************************************** ++ (id)circleButtonWithSize:(CGSize)size borderSize:(CGFloat)borderSize normalTitle:(NSString *)title addTarget:(id)target action:(SEL)action animated:(BOOL)animated +{ + DKCircleButton *readModeBtn = [[DKCircleButton alloc] init]; + readModeBtn.frame = CGRectMake(0, 0, size.width, size.height); + + animated?[readModeBtn blink]:nil; + + readModeBtn.borderSize = 1.5f; + [readModeBtn addTarget:target action:action forControlEvents:UIControlEventTouchDown]; + + [readModeBtn setTitle:title forState:UIControlStateNormal]; + readModeBtn.titleLabel.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:17]; + + return readModeBtn; +} + +- (void)selectedWithAnimation:(BOOL)animation +{ + animation?[self blink]: nil; + [self setSelected:YES]; + self.backgroundColor = [UIColor colorWithWhite:1 alpha:0.25]; + +} +- (void)deselected +{ + [self setSelected:NO]; + self.backgroundColor = nil; +} + @end From a34b7c9f51a6a51d56d67e07252644841db7d816 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jason=20Zhou=20=E5=91=A8=E6=AD=A3=E6=98=8C?= Date: Sat, 9 Aug 2014 19:46:50 +0800 Subject: [PATCH 2/3] bordersize changed bordersize changed --- Example/Circle Button Demo/DKCircleButton/DKCircleButton.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Example/Circle Button Demo/DKCircleButton/DKCircleButton.m b/Example/Circle Button Demo/DKCircleButton/DKCircleButton.m index 00edae3..23cd140 100644 --- a/Example/Circle Button Demo/DKCircleButton/DKCircleButton.m +++ b/Example/Circle Button Demo/DKCircleButton/DKCircleButton.m @@ -238,7 +238,7 @@ + (id)circleButtonWithSize:(CGSize)size borderSize:(CGFloat)borderSize normalTit animated?[readModeBtn blink]:nil; - readModeBtn.borderSize = 1.5f; + readModeBtn.borderSize = borderSize; [readModeBtn addTarget:target action:action forControlEvents:UIControlEventTouchDown]; [readModeBtn setTitle:title forState:UIControlStateNormal]; From 6e25778c36f0b050d8be4f4f1f0d880c9586d389 Mon Sep 17 00:00:00 2001 From: luca Date: Tue, 6 Jan 2015 15:27:36 +0100 Subject: [PATCH 3/3] added InitWithCoder to use with Storyboard includes fixed leak from Jasonbroker --- DKCircleButton/DKCircleButton.m | 108 ++++++++++++++++++-------------- 1 file changed, 62 insertions(+), 46 deletions(-) diff --git a/DKCircleButton/DKCircleButton.m b/DKCircleButton/DKCircleButton.m index 99f0a82..fa9e36a 100644 --- a/DKCircleButton/DKCircleButton.m +++ b/DKCircleButton/DKCircleButton.m @@ -20,61 +20,74 @@ @interface DKCircleButton () @implementation DKCircleButton -@synthesize highLightView = _highLightView; -@synthesize displayShading = _displayShading; -@synthesize gradientLayerTop = _gradientLayerTop; -@synthesize gradientLayerBottom = _gradientLayerBottom; -@synthesize borderSize = _borderSize; -@synthesize borderColor = _borderColor; -@synthesize animateTap = _animateTap; +@synthesize highLightView; +@synthesize displayShading; +@synthesize gradientLayerTop; +@synthesize gradientLayerBottom; +@synthesize borderSize; +@synthesize borderColor; +@synthesize animateTap; + +- (instancetype)initWithCoder:(NSCoder *)coder +{ + self = [super initWithCoder:coder]; + if (self) { + [self commonInit]; + } + return self; +} - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { - _highLightView = [[UIView alloc] initWithFrame:frame]; - - _highLightView.userInteractionEnabled = YES; - _highLightView.alpha = 0; - _highLightView.backgroundColor = [UIColor colorWithWhite:1 alpha:0.5]; - - _borderColor = [UIColor whiteColor]; - _animateTap = YES; - _borderSize = DKCircleButtonBorderWidth; - - self.clipsToBounds = YES; - self.titleLabel.textAlignment = NSTextAlignmentCenter; - self.titleLabel.lineBreakMode = NSLineBreakByWordWrapping; - - _gradientLayerTop = [CAGradientLayer layer]; - _gradientLayerTop.frame = CGRectMake(0.0, 0.0, frame.size.width, frame.size.height / 4); - _gradientLayerTop.colors = @[(id)[UIColor blackColor].CGColor, (id)[[UIColor lightGrayColor] colorWithAlphaComponent:0.01].CGColor]; - - _gradientLayerBottom = [CAGradientLayer layer]; - _gradientLayerBottom.frame = CGRectMake(0.0, frame.size.height * 3 / 4, frame.size.width, frame.size.height / 4); - _gradientLayerBottom.colors = @[(id)[[UIColor lightGrayColor] colorWithAlphaComponent:0.01].CGColor, (id)[UIColor blackColor].CGColor]; - - [self addSubview:_highLightView]; + [self commonInit]; } return self; } -- (void)setDisplayShading:(BOOL)displayShading { - _displayShading = displayShading; +-(void)commonInit{ + highLightView = [[UIView alloc] initWithFrame:self.bounds]; + + highLightView.userInteractionEnabled = YES; + highLightView.alpha = 0; + highLightView.backgroundColor = [UIColor colorWithWhite:1 alpha:0.5]; + + borderColor = [UIColor whiteColor]; + animateTap = YES; + borderSize = DKCircleButtonBorderWidth; + + self.clipsToBounds = YES; + self.titleLabel.textAlignment = NSTextAlignmentCenter; + self.titleLabel.lineBreakMode = NSLineBreakByWordWrapping; + + gradientLayerTop = [CAGradientLayer layer]; + gradientLayerTop.frame = CGRectMake(0.0, 0.0, self.bounds.size.width, self.bounds.size.height / 4); + gradientLayerTop.colors = @[(id)[UIColor blackColor].CGColor, (id)[[UIColor lightGrayColor] colorWithAlphaComponent:0.01].CGColor]; + + gradientLayerBottom = [CAGradientLayer layer]; + gradientLayerBottom.frame = CGRectMake(0.0, self.bounds.size.height * 3 / 4, self.bounds.size.width, self.bounds.size.height / 4); + gradientLayerBottom.colors = @[(id)[[UIColor lightGrayColor] colorWithAlphaComponent:0.01].CGColor, (id)[UIColor blackColor].CGColor]; + + [self addSubview:highLightView]; +} + +- (void)setDisplayShading:(BOOL)dS { + displayShading = dS; if (displayShading) { - [self.layer addSublayer:self.gradientLayerTop]; - [self.layer addSublayer:self.gradientLayerBottom]; + [self.layer addSublayer:gradientLayerTop]; + [self.layer addSublayer:gradientLayerBottom]; } else { - [self.gradientLayerTop removeFromSuperlayer]; - [self.gradientLayerBottom removeFromSuperlayer]; + [gradientLayerTop removeFromSuperlayer]; + [gradientLayerBottom removeFromSuperlayer]; } [self layoutSubviews]; } -- (void)setBorderColor:(UIColor *)borderColor { - _borderColor = borderColor; +- (void)setBorderColor:(UIColor *)bC { + borderColor = bC; [self layoutSubviews]; } @@ -87,12 +100,12 @@ - (void)layoutSubviews { - (void)setHighlighted:(BOOL)highlighted { if (highlighted) { - self.layer.borderColor = [self.borderColor colorWithAlphaComponent:1.0].CGColor; + self.layer.borderColor = [borderColor colorWithAlphaComponent:1.0].CGColor; [self triggerAnimateTap]; } else { - self.layer.borderColor = [self.borderColor colorWithAlphaComponent:0.7].CGColor; + self.layer.borderColor = [borderColor colorWithAlphaComponent:0.7].CGColor; } } @@ -103,6 +116,9 @@ - (void)updateMaskToBounds:(CGRect)maskBounds { maskLayer.bounds = maskBounds; maskLayer.path = maskPath; + + CGPathRelease(maskPath); + maskLayer.fillColor = [UIColor blackColor].CGColor; CGPoint point = CGPointMake(maskBounds.size.width/2, maskBounds.size.height/2); @@ -111,10 +127,10 @@ - (void)updateMaskToBounds:(CGRect)maskBounds { [self.layer setMask:maskLayer]; self.layer.cornerRadius = CGRectGetHeight(maskBounds) / 2.0; - self.layer.borderColor = [self.borderColor colorWithAlphaComponent:0.7].CGColor; - self.layer.borderWidth = self.borderSize; + self.layer.borderColor = [borderColor colorWithAlphaComponent:0.7].CGColor; + self.layer.borderWidth = borderSize; - self.highLightView.frame = self.bounds; + highLightView.frame = self.bounds; } - (void)blink { @@ -152,11 +168,11 @@ - (void)blink { - (void)triggerAnimateTap { - if (self.animateTap == NO) { + if (animateTap == NO) { return; } - self.highLightView.alpha = 1; + highLightView.alpha = 1; __weak typeof(self) this = self; @@ -179,7 +195,7 @@ - (void)triggerAnimateTap { circleShape.position = shapePosition; circleShape.fillColor = [UIColor clearColor].CGColor; circleShape.opacity = 0; - circleShape.strokeColor = self.borderColor.CGColor; + circleShape.strokeColor = borderColor.CGColor; circleShape.lineWidth = 2.0; [self.superview.layer addSublayer:circleShape];