iOS自定义按钮(btn)的图片大小和位置

本文可实现完全自定义btn的图片大小!
不知道各位小伙伴有没有碰到过这种情况,美工给了一张图片,要求放在按钮上。
奈何图片太大,若是直接用[btn setImage:[UIImage imageNamed:@""] forState:UIControlStateNormal]方法,会导致图片超出按钮的frame;
若是将图片重绘到指定大小,图片会变的模糊;
又不想自定义控件,怎么办?
有同学竟然让我去找美工重新要图,呵呵哒,我才不会让他以为我连这个小问题都解决不了。。。
问度娘,不过这次度娘真心不给力。
没办法,只好自定义控件了。。。
不过,这显然不是我想要的结果,我不死心的又开始找。
终于,在以前的一个老项目里,我找到了答案,在这里,跟大家分享下。。。
很简单,创建UIButton的子类,重写父类的两个方法就搞定了
下面这个demo,我把image放在了title的右侧,可以自定义image、title的大小和位置,如图:

btn.png

#import
typedef enum {
LLButtonTypeNormal = 0, //系统默认类型
LLButtonTypeImageRight, //图片在title右边
}LLButtonType;
@interface LLBaseBtn : UIButton
+ (instancetype)LL_ButtonWithType:(LLButtonType)type;
@end

#import "LLBaseBtn.h"
@interface LLBaseBtn ()
@property (nonatomic, assign) LLButtonType type;
@end
@implementation LLBaseBtn

+ (instancetype)LL_ButtonWithType:(LLButtonType)type{
LLBaseBtn *baseBtn = [super buttonWithType:UIButtonTypeCustom];
if (baseBtn) {
    baseBtn.type = type;
}
return baseBtn;
}

//重设image的frame
- (CGRect)imageRectForContentRect:(CGRect)contentRect{
if (self.currentImage) {
    if (_type == LLButtonTypeImageRight) {
        //实际应用中要根据情况,返回所需的frame
        return CGRectMake(110, 5, self.frame.size.height-10, self.frame.size.height-10);
    }
}
return [super imageRectForContentRect:contentRect];
}

//重设title的frame
- (CGRect)titleRectForContentRect:(CGRect)contentRect{
if (self.currentImage) {
    if (_type == LLButtonTypeImageRight) {
        //实际应用中要根据情况,返回所需的frame
        return CGRectMake(5, 5, 100, self.frame.size.height-10);
    }
}
return [super titleRectForContentRect:contentRect];
}

@end

觉得好,请给个star,谢谢!

你可能感兴趣的:(iOS自定义按钮(btn)的图片大小和位置)