您的位置:首页 > 移动开发 > IOS开发

【深入浅出IOS开发】彩票-重写按钮控件

2015-03-31 09:28 411 查看
①创建子类继承UIButton,然后关联相应的UIButton控件

②重写initWithCoder 和 initWithFrame里面设置同样的代码,确保不管是通过代码还是xib,storyborad来创建Button都会执行

③重写titleRectForContentRect和imgeRectForContentRect

[objc] view
plaincopy

#import "MJTitleButton.h"  

#import <Availability.h>  

  

@interface MJTitleButton()  

@property (nonatomic, strong) UIFont *titleFont;  

@end  

  

// initWithCoder  --->  awakeFromNib  

@implementation MJTitleButton  

  

/** 

 *  从文件中解析一个对象的时候就会调用这个方法 

 */  

- (id)initWithCoder:(NSCoder *)decoder  

{  

    if (self = [super initWithCoder:decoder]) {  

        [self setup];  

    }  

    return self;  

}  

  

/** 

 *  通过代码创建控件的时候就会调用 

 */  

- (id)initWithFrame:(CGRect)frame  

{  

    if (self = [super initWithFrame:frame]) {  

        [self setup];  

    }  

    return self;  

}  

  

/** 

 *  初始化 

 */  

- (void)setup  

{  

    self.titleFont = [UIFont systemFontOfSize:14];  

    self.titleLabel.font = self.titleFont;  

      

    // 图标居中  

    self.imageView.contentMode = UIViewContentModeCenter;  

}  

  

  

/** 

 *  控制器内部label的frame 

 *  contentRect : 按钮自己的边框 

 */  

- (CGRect)titleRectForContentRect:(CGRect)contentRect  

{  

    CGFloat titleX = 0;  

    CGFloat titleY = 0;  

    NSDictionary *attrs = @{NSFontAttributeName : self.titleFont};  

    CGFloat titleW;  

      

    if (iOS7) {  

        // 只有Xcode5才会编译这段代码  

#ifdef __IPHONE_7_0  

        titleW = [self.currentTitle boundingRectWithSize:CGSizeMake(MAXFLOAT, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:attrs context:nil].size.width;  

#else  

        titleW = [self.currentTitle sizeWithFont:self.titleFont].width;  

#endif  

    } else {  

        titleW = [self.currentTitle sizeWithFont:self.titleFont].width;  

    }  

    CGFloat titleH = contentRect.size.height;  

    return CGRectMake(titleX, titleY, titleW, titleH);  

}  

  

/** 

 *  控制器内部imageView的frame 

 */  

- (CGRect)imageRectForContentRect:(CGRect)contentRect  

{  

    CGFloat imageW = 30;  

    CGFloat imageX = contentRect.size.width - imageW;  

    CGFloat imageY = 0;  

    CGFloat imageH = contentRect.size.height;  

    return CGRectMake(imageX, imageY, imageW, imageH);  

}  

  

@end  

在Button所在的控制器中,连线实现淡季事件

[objc] view
plaincopy

- (IBAction)titleClick:(UIButton *)sender {  

    // 1.按钮旋转  

    [UIView animateWithDuration:0.25 animations:^{  

        sender.imageView.transform = CGAffineTransformMakeRotation(-M_PI);  

    }];  

      

    // 2.添加uiview  

    UIView *temp  = [[UIView alloc] init];  

    temp.frame = CGRectMake(10, 10, 100, 30);  

    temp.backgroundColor = [UIColor redColor];  

    [self.view addSubview:temp];  

}  

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios 分类 UIButton