自定义图片和文字位置UIButton
2018-04-18 本文已影响4人
crazy一笑
#import <UIKit/UIKit.h>
typedef enum : NSUInteger {
ZXMTBButtonTypeHorizontal,//文字在左,图片在右
ZXMTBButtonTypeVertical,//文字在下,图片在上
} ZXMTBButtonType;
@interface ZXMTBButton : UIButton
-(instancetype)initWithFrame:(CGRect)frame type:(ZXMTBButtonType)type;
@property(nonatomic, assign) CGSize imageSize;//设置图片的大小
@property(nonatomic, assign) ZXMTBButtonType type;
@end
#import "ZXMTBButton.h"
#define kScreenScale 1.0 / [UIScreen mainScreen].scale
#define kDefaultPadding (10. * kScreenScale)
@interface ZXMTBButton()
//
//@property(nonatomic, assign) ZXMTBButtonType type;
@property(nonatomic, assign) CGFloat textW;
@end
@implementation ZXMTBButton
-(void)awakeFromNib{
[super awakeFromNib];
self.titleLabel.textAlignment = NSTextAlignmentCenter;
}
-(instancetype)init{
if (self = [super init]) {
self.titleLabel.textAlignment = NSTextAlignmentCenter;
}
return self;
}
-(instancetype)initWithFrame:(CGRect)frame type:(ZXMTBButtonType)type{
if (self = [super initWithFrame:frame]) {
self.type = type;
}
return self;
}
-(instancetype)initWithFrame:(CGRect)frame{
if (self = [super initWithFrame:frame]) {
self.titleLabel.textAlignment = NSTextAlignmentCenter;
}
return self;
}
-(CGRect)imageRectForContentRect:(CGRect)contentRect{
if (self.type == ZXMTBButtonTypeHorizontal) {
return CGRectMake((self.frame.size.width - self.imageSize.width - self.textW) * 0.5 + self.textW, (self.frame.size.height - self.imageSize.height) * 0.5, self.imageSize.width, self.imageSize.height);
}else{
return CGRectMake((self.frame.size.width - self.imageSize.width) * 0.5, 0, self.imageSize.width, self.imageSize.height);
}
}
-(CGRect)titleRectForContentRect:(CGRect)contentRect{
if (self.type == ZXMTBButtonTypeHorizontal) {
return CGRectMake((self.frame.size.width - self.imageSize.width - self.textW) * 0.5, 0, self.textW, self.frame.size.height);
}else{
return CGRectMake(0, self.imageSize.height, self.frame.size.width, self.frame.size.height - self.imageSize.height);
}
}
-(void)setImageSize:(CGSize)imageSize{
if (self.frame.size.width > 0) {
if (imageSize.width > self.frame.size.width) {
imageSize.width = self.frame.size.width;
}
if (imageSize.height > self.frame.size.height) {
imageSize.height = self.frame.size.height;
}
}
_imageSize = imageSize;
CGFloat w = [self.titleLabel.text boundingRectWithSize:CGSizeMake(self.frame.size.width - self.imageSize.width, self.frame.size.height) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:self.titleLabel.font} context:nil].size.width;
self.textW = w;
}
-(void)setType:(ZXMTBButtonType)type{
_type = type;
}
-(void)setTitle:(NSString *)title forState:(UIControlState)state{
[super setTitle:title forState:state];
CGFloat w = [title boundingRectWithSize:CGSizeMake(self.frame.size.width - self.imageSize.width, self.frame.size.height) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:self.titleLabel.font} context:nil].size.width;
self.textW = w;
}
@end