https://github.com/YouXianMing

KHFlatButton

KHFlatButton

https://github.com/kylehorn/KHFlatButton

 

效果:

对于自己做demo来说,每次设置button就不用这么折腾了,几句话就行了,非常爽:)

其实可以改进的地方非常多的.

 

源码:

KHFlatButton.h + KHFlatButton.m

//
//  KHFlatButton.h
//
//  Created by Kyle Horn on 10/7/13.
//  Copyright (c) 2013 Kyle Horn. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface KHFlatButton : UIButton

+ (KHFlatButton *)buttonWithFrame:(CGRect)frame
                        withTitle:(NSString *)title
                  backgroundColor:(UIColor *)backgroundColor
                     cornerRadius:(CGFloat)radius;

// Factory method that returns a button with default corner radius of 3.0
+ (KHFlatButton *)buttonWithFrame:(CGRect)frame
                        withTitle:(NSString *)title
                  backgroundColor:(UIColor *)backgroundColor;

+ (UIBarButtonItem *)barButtonWithTitle:(NSString *)title
                        backgroundColor:(UIColor *)backgroundColor;

@property (nonatomic) CGFloat cornerRadius;

@end
//
//  KHFlatButton.m
//
//  Created by Kyle Horn on 10/7/13.
//  Copyright (c) 2013 Kyle Horn. All rights reserved.
//

#import "KHFlatButton.h"
#import <QuartzCore/QuartzCore.h>

static CGFloat const kDefaultCornerRadius = 3.0;
static CGFloat const kMinimumFontSize = 14.0;
static CGFloat const kHighlightDelta = 0.2;

@interface KHFlatButton()
@property (strong, nonatomic) UIColor *originalBackgroundColor;
@end

@implementation KHFlatButton

@dynamic cornerRadius;

- (void)awakeFromNib
{
    [super awakeFromNib];
    
    self.cornerRadius = kDefaultCornerRadius;
    
    [self addTarget:self
             action:@selector(wasPressed)
   forControlEvents:(UIControlEventTouchDown       |
                     UIControlEventTouchDownRepeat |
                     UIControlEventTouchDragInside |
                     UIControlEventTouchDragEnter)];
    
    [self addTarget:self
             action:@selector(endedPress)
   forControlEvents:(UIControlEventTouchCancel      |
                     UIControlEventTouchDragOutside |
                     UIControlEventTouchDragExit    |
                     UIControlEventTouchUpInside    |
                     UIControlEventTouchUpOutside)];
}

- (id)initWithFrame:(CGRect)frame withBackgroundColor:(UIColor*)backgroundColor
{
    return [self initWithFrame:frame
                     withTitle:nil
               backgroundColor:backgroundColor
                  cornerRadius:kDefaultCornerRadius];
}

- (id)initWithFrame:(CGRect)frame withTitle:(NSString *)title backgroundColor:(UIColor*)backgroundColor cornerRadius:(CGFloat)radius;
{
    self = [super initWithFrame:frame];
    if (self)
    {
        self.backgroundColor = backgroundColor;
        self.cornerRadius    = radius;
        [self setTitle:title
              forState:UIControlStateNormal];
        
        CGFloat fontSize = floorf(CGRectGetHeight(self.bounds) / 2.5);
        self.titleLabel.font = [UIFont boldSystemFontOfSize:MAX(kMinimumFontSize, fontSize)];
        
        // 根据触摸的状态分离出两个方法,一个方法用于改变自身,一个方法用于还原自身
        [self addTarget:self
                 action:@selector(wasPressed)
       forControlEvents:(UIControlEventTouchDown       |
                         UIControlEventTouchDownRepeat |
                         UIControlEventTouchDragInside |
                         UIControlEventTouchDragEnter)];
        
        [self addTarget:self
                 action:@selector(endedPress)
       forControlEvents:(UIControlEventTouchCancel      |
                         UIControlEventTouchDragOutside |
                         UIControlEventTouchDragExit    |
                         UIControlEventTouchUpInside    |
                         UIControlEventTouchUpOutside)];
    }
    return self;
}

+ (KHFlatButton *)buttonWithFrame:(CGRect)frame withTitle:(NSString *)title backgroundColor:(UIColor *)backgroundColor cornerRadius:(CGFloat)radius
{
    KHFlatButton *btn = [[KHFlatButton alloc] initWithFrame:frame
                                                  withTitle:title
                                            backgroundColor:backgroundColor
                                               cornerRadius:radius];
    return btn;    
}

+ (KHFlatButton *)buttonWithFrame:(CGRect)frame withTitle:(NSString *)title backgroundColor:(UIColor *)backgroundColor
{
    KHFlatButton *btn = [[KHFlatButton alloc] initWithFrame:frame
                                                  withTitle:title
                                            backgroundColor:backgroundColor
                                               cornerRadius:kDefaultCornerRadius];
    return btn;
}

+ (UIBarButtonItem *)barButtonWithTitle:(NSString *)title backgroundColor:(UIColor *)backgroundColor
{
    KHFlatButton *btn = [[KHFlatButton alloc]initWithFrame:CGRectZero withTitle:title backgroundColor:backgroundColor cornerRadius:kDefaultCornerRadius];
    
    // Add padding to button label
    btn.titleLabel.textAlignment = NSTextAlignmentCenter;
    [btn sizeToFit];
    CGRect frame = btn.frame;
    frame.size.width += 20;
    btn.frame = frame;
    btn.titleLabel.font = [UIFont boldSystemFontOfSize:13.0];
    UIBarButtonItem *barBtn = [[UIBarButtonItem alloc] initWithCustomView:btn];
    return barBtn;
}

- (void)setBackgroundColor:(UIColor *)backgroundColor
{
    super.backgroundColor = backgroundColor;
    self.originalBackgroundColor = backgroundColor;
}

- (void)wasPressed
{
    CGFloat red, grn, blu, white, alpha = 0.0;
    [self.originalBackgroundColor getRed:&red
                                   green:&grn
                                    blue:&blu
                                   alpha:&alpha];
    
    [self.originalBackgroundColor getWhite:&white
                                     alpha:&alpha];
    
    super.backgroundColor = [UIColor colorWithRed:red - kHighlightDelta
                                            green:grn - kHighlightDelta
                                             blue:blu - kHighlightDelta
                                            alpha:alpha];
}

- (void)endedPress
{
    super.backgroundColor = self.originalBackgroundColor;
}

- (void)setCornerRadius:(CGFloat)cornerRadius
{
    self.layer.cornerRadius = cornerRadius;
}

- (CGFloat)cornerRadius
{
    return self.layer.cornerRadius;
}

@end
//
//  RootViewController.m
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import "RootViewController.h"
#import "KHFlatButton.h"

@interface RootViewController ()

@end

@implementation RootViewController



- (void)viewDidLoad
{
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor blackColor];

    // 初始化按钮
    KHFlatButton *button = \
        [KHFlatButton buttonWithFrame:(CGRect){CGPointZero, CGSizeMake(150, 50)}
                            withTitle:@"YouXianMing"
                      backgroundColor:[UIColor magentaColor]];
    button.center = self.view.center;
    [self.view addSubview:button];
    
    // 添加事件
    [button addTarget:self
               action:@selector(buttonsEvent:)
     forControlEvents:UIControlEventTouchUpInside];
}

- (void)buttonsEvent:(KHFlatButton *)button
{
    NSLog(@"%@", button);
}

@end

这个地方才是我们需要学习的地方:

 

 

 

 

 

 

 

posted @ 2014-06-20 08:55  YouXianMing  阅读(500)  评论(2编辑  收藏  举报