| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- //
- // CustomButton.m
- // JasonDevelop
- //
- // Created by Jason Lee on 2013. 12. 16..
- // Copyright (c) jasondevelop. All rights reserved.
- //
- #import "UIView+AutoLayoutDebugging.h"
- #import "UIImage+Addtions.h"
- #import "CommonUtil.h"
- #import "ImageUtil.h"
- #import "CustomButton.h"
- @interface CustomButton () {
- UIImage *_imgNormal, *_imgHighlighted;
- UIImage *_bgImageNormal, *_bgImageHighlited;
- UIEdgeInsets _insets, _bgInsets;
- }
- @end
- @implementation CustomButton
- #define kfRoundWidth 4.0f
- - (void)setImageStratchForState:(UIControlState)state capInsets:(UIEdgeInsets)insets {
- UIImage *image = [self imageForState:state];
- image = [ImageUtil resizableImageWithCapInsets:insets resizingMode:UIImageResizingModeStretch img:image];
- [super setImage:image forState:state];
- }
- - (void)setBackgroundImageStretchForState:(UIControlState)state capInsets:(UIEdgeInsets)insets {
- UIImage *bimage = [self backgroundImageForState:state];
- bimage = [ImageUtil resizableImageWithCapInsets:insets resizingMode:UIImageResizingModeStretch img:bimage];
- [super setBackgroundImage:bimage forState:state];
- }
- - (instancetype)initWithFrame:(CGRect)frame {
- if (self = [super initWithFrame:frame]) {
- if (!CGRectEqualToRect(_rectForCap, CGRectZero)) {//rectForCap이 설정된 경우, 이미지를 리사이즈함.
- CGFloat top, left, bottom, right;
- top = CGRectGetMinY(_rectForCap);
- left = CGRectGetMinX(_rectForCap);
- bottom = CGRectGetHeight(_rectForCap);
- right = CGRectGetWidth(_rectForCap);
- _insets = UIEdgeInsetsMake(top, left, bottom, right);
- [self setImageStratchForState:UIControlStateNormal capInsets:_insets];
- [self setImageStratchForState:UIControlStateHighlighted capInsets:_insets];
- }
- if (!CGRectEqualToRect(_rectForCapBackground, CGRectZero)) {//rectForCap이 설정된 경우, 이미지를 리사이즈함.
- CGFloat top, left, bottom, right;
- top = CGRectGetMinY(_rectForCapBackground);
- left = CGRectGetMinX(_rectForCapBackground);
- bottom = CGRectGetHeight(_rectForCapBackground);
- right = CGRectGetWidth(_rectForCapBackground);
- _bgInsets = UIEdgeInsetsMake(top, left, bottom, right);
- [self setBackgroundImageStretchForState:UIControlStateNormal capInsets:_bgInsets];
- [self setBackgroundImageStretchForState:UIControlStateHighlighted capInsets:_bgInsets];
- [self setBackgroundImageStretchForState:UIControlStateDisabled capInsets:_bgInsets];
- } else {//rectForCap이 설정되지 않은 경우, 픽스된 사이즈로 이미지를 리사이즈함.
- _bgInsets = UIEdgeInsetsMake(kfRoundWidth, kfRoundWidth, kfRoundWidth, kfRoundWidth);
- [self setBackgroundImageStretchForState:UIControlStateNormal capInsets:_bgInsets];
- [self setBackgroundImageStretchForState:UIControlStateHighlighted capInsets:_bgInsets];
- [self setBackgroundImageStretchForState:UIControlStateDisabled capInsets:_bgInsets];
- }
- }
- return self;
- }
- - (void)awakeFromNib {//NIB로 로드될 경우,
- if (!CGRectEqualToRect(_rectForCap, CGRectZero)) {//rectForCap이 설정된 경우, 이미지를 리사이즈함.
- CGFloat top, left, bottom, right;
- top = CGRectGetMinY(_rectForCap);
- left = CGRectGetMinX(_rectForCap);
- bottom = CGRectGetHeight(_rectForCap);
- right = CGRectGetWidth(_rectForCap);
- _insets = UIEdgeInsetsMake(top, left, bottom, right);
- [self setImageStratchForState:UIControlStateNormal capInsets:_insets];
- [self setImageStratchForState:UIControlStateHighlighted capInsets:_insets];
- }
- if (!CGRectEqualToRect(_rectForCapBackground, CGRectZero)) {//rectForCap이 설정된 경우, 이미지를 리사이즈함.
- if (!CGRectEqualToRect(_rectForCapBackground, CGRectMake(-1, 0, 0, 0))) {
- CGFloat top, left, bottom, right;
- top = CGRectGetMinY(_rectForCapBackground);
- left = CGRectGetMinX(_rectForCapBackground);
- bottom = CGRectGetHeight(_rectForCapBackground);
- right = CGRectGetWidth(_rectForCapBackground);
- _bgInsets = UIEdgeInsetsMake(top, left, bottom, right);
- [self setBackgroundImageStretchForState:UIControlStateNormal capInsets:_bgInsets];
- [self setBackgroundImageStretchForState:UIControlStateHighlighted capInsets:_bgInsets];
- [self setBackgroundImageStretchForState:UIControlStateDisabled capInsets:_bgInsets];
- }
- } else {//rectForCap이 설정되지 않은 경우, 픽스된 사이즈로 이미지를 리사이즈함.
- _bgInsets = UIEdgeInsetsMake(kfRoundWidth, kfRoundWidth, kfRoundWidth, kfRoundWidth);
- [self setBackgroundImageStretchForState:UIControlStateNormal capInsets:_bgInsets];
- [self setBackgroundImageStretchForState:UIControlStateHighlighted capInsets:_bgInsets];
- [self setBackgroundImageStretchForState:UIControlStateDisabled capInsets:_bgInsets];
- }
- _textColorNormal = [self titleColorForState:UIControlStateNormal];
- if (_placeHolder) {
- [self setTitle:_placeHolder forState:UIControlStateNormal];
- }
- if (_placeHolderColor) {
- [self setTitleColor:_placeHolderColor forState:UIControlStateNormal];
- }
- #ifdef DEBUG
- NSString *identifier = [NSString stringWithFormat:@"%@", [self titleForState:UIControlStateNormal]];
- if ([identifier isEqualToString:@"(null)"] || !identifier || [identifier isEqualToString:ksEmptyString]) {
- identifier = NSStringFromCGRect(self.frame);
- }
- [self setValue:identifier forKey:@"layoutDebuggingIdentifier"];
- #endif
- }
- #pragma mark - Properties
- - (void)setPlaceHolder:(NSString *)placeHolder {
- _placeHolder = placeHolder;
- [self setTitle:_placeHolder forState:UIControlStateNormal];
- }
- - (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state {//백그라운드 이미지를 버튼 크기에 맞게 조정함.
- image = [ImageUtil resizableImageWithCapInsets:_bgInsets resizingMode:UIImageResizingModeStretch img:image];
- [super setBackgroundImage:image forState:state];
- }
- - (void)setFrame:(CGRect)frame {
- [super setFrame:frame];
- if ([self backgroundImageForState:UIControlStateNormal]) {//백그라운드 이미지를 버튼 크기에 맞게 조정함.
- [self setBackgroundImage:[ImageUtil stretchedImage:[self backgroundImageForState:UIControlStateNormal] expectSize:self.frame.size] forState:UIControlStateNormal];
- }
- if ([self backgroundImageForState:UIControlStateHighlighted]) {//백그라운드 이미지를 버튼 크기에 맞게 조정함.
- [self setBackgroundImage:[ImageUtil stretchedImage:[self backgroundImageForState:UIControlStateHighlighted] expectSize:self.frame.size] forState:UIControlStateHighlighted];
- }
- }
- //- (void)setUnderLine:(BOOL)setUnderLine {
- //
- // NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:[self titleForState:UIControlStateNormal]];
- // [attrString addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInteger:NSUnderlineStyleSingle] range:NSMakeRange(0, [attrString length])];
- //
- // UIColor* textColor = [self titleColorForState:UIControlStateNormal];
- //
- // NSNumber *underLine = setUnderLine ? [NSNumber numberWithInteger:NSUnderlineStyleSingle] : [NSNumber numberWithInteger:NSUnderlineStyleNone];
- //
- // [attrString setAttributes:@{NSForegroundColorAttributeName:textColor,NSUnderlineStyleAttributeName:underLine} range:NSMakeRange(0,[attrString length])];
- //
- // [self setAttributedTitle:attrString forState:UIControlStateNormal];
- //}
- //- (void)setTitle:(NSString *)title forState:(UIControlState)state {
- // [super setTitle:title forState:UIControlStateNormal];
- //
- // NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:[self titleForState:state]];
- // UIColor* textColor = _textColorNormal ? _textColorNormal : [self titleColorForState:state];
- // [attrString setAttributes:@{NSForegroundColorAttributeName:textColor} range:NSMakeRange(0, [attrString length])];
- //
- // [self setAttributedTitle:attrString forState:state];
- //}
- //
- //- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state {
- // [super setTitleColor:color forState:state];
- //
- // NSMutableAttributedString *attrString = nil;
- // if (![self attributedTitleForState:state]) {
- // attrString = [[NSMutableAttributedString alloc] initWithString:[self titleForState:state]];
- // [attrString addAttributes:@{NSForegroundColorAttributeName:[UIColor blackColor]} range:NSMakeRange(0, [self titleForState:state].length)];
- // } else {
- // attrString = [[NSMutableAttributedString alloc] initWithAttributedString:[self attributedTitleForState:state]];
- // [attrString setAttributes:@{NSForegroundColorAttributeName:[UIColor blackColor]} range:NSMakeRange(0, [self titleForState:state].length)];
- // }
- //
- // [self setAttributedTitle:attrString forState:state];
- //}
- - (void)faceOffImage {
- if (!_imgNormal && !_imgHighlighted) {
- _imgNormal = [self imageForState:UIControlStateNormal];
- _imgHighlighted = [self imageForState:UIControlStateHighlighted];
- }
- if (_imgNormal && _imgHighlighted) {
- if ([_imgNormal isEqual:[self imageForState:UIControlStateNormal]]) {
- [self setImage:_imgHighlighted forState:UIControlStateNormal];
- [self setImage:_imgNormal forState:UIControlStateHighlighted];
- } else {
- [self setImage:_imgNormal forState:UIControlStateNormal];
- [self setImage:_imgHighlighted forState:UIControlStateHighlighted];
- }
- }
- //FIXME : weird
- // if (!_bgImageNormal && !_bgImageHighlited) {
- _bgImageNormal = [self backgroundImageForState:UIControlStateNormal];
- _bgImageHighlited = [self backgroundImageForState:UIControlStateHighlighted];
- // }
- if (_bgImageNormal && _bgImageHighlited) {
- if ([_bgImageNormal isEqual:[self backgroundImageForState:UIControlStateNormal]]) {
- [self setBackgroundImage:_bgImageHighlited forState:UIControlStateNormal];
- [self setBackgroundImage:_bgImageNormal forState:UIControlStateHighlighted];
- } else {
- [self setBackgroundImage:_bgImageNormal forState:UIControlStateNormal];
- [self setBackgroundImage:_bgImageHighlited forState:UIControlStateHighlighted];
- }
- [self setBackgroundImageStretchForState:UIControlStateNormal capInsets:_bgInsets];
- [self setBackgroundImageStretchForState:UIControlStateHighlighted capInsets:_bgInsets];
- }
- }
- @end
- @implementation CustomLabelButton
- @end
|