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

来源:互联网 发布:机械设计制图软件 编辑:程序博客网 时间:2024/05/20 05:29

①创建子类继承UIButton,然后关联相应的UIButton控件

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

③重写titleRectForContentRect和imgeRectForContentRect

#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所在的控制器中,连线实现淡季事件

- (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];}


0 0