下面是对UIButton的图文排列的一个简易封装。
添加了一个对大图的处理的接口:如果要显示的图片过大,可以先设置比例对其缩放显示,再来进行排列。
UIButton+ImageAndTitle.h
#import <UIKit/UIKit.h>
@interface UIButton (ImageAndTitle)
/**
* 缩放图片(主要是针对大图显示不完全,就先缩放)
* times : 倍数
*/
- (void)zoomImage:(CGFloat)times;
/**
* 图片、文字居中
*
*/
- (void)setImageAndTitleCenter;
/**
* 上下居中,图片在上,文字在下
* space : 图文间距
*/
- (void)setImageUp:(CGFloat)space;
/**
* 上下居中,图片在上,文字在下
* 默认间距为 6.0
*/
- (void)setImageUp;
/**
* 上下居中,图片在下,文字在上
* space : 图文间距
*/
- (void)setImageDown:(CGFloat)space;
/**
* 上下居中,图片在下,文字在上
* 默认间距为 6.0
*/
- (void)setImageDown;
/**
* 左右居中,图片在左,文字在右
* space : 图文间距
*/
- (void)setImageLeft:(CGFloat)space;
/**
* 左右居中,图片在左,文字在右
* 默认间距为 6.0
*/
- (void)setImageLeft;
/**
* 上下居中,图片在右,文字在左
* space : 图文间距
*/
- (void)setImageRight:(CGFloat)space;
/**
* 上下居中,图片在右,文字在左
* 默认间距为 6.0
*/
- (void)setImageRight;
/**
* 文字居中,图片在左
* space : 图文间距
*/
- (void)setTitleCenterAndImageLeft:(CGFloat)space;
/**
* 文字居中,图片在左
* 默认间距为 6.0
*/
- (void)setTitleCenterAndImageLeft;
/**
* 文字居中,图片在右
* space : 图文间距
*/
- (void)setTitleCenterAndImageRight:(CGFloat)space;
/**
* 文字居中,图片在右
* 默认间距为 6.0
*/
- (void)setTitleCenterAndImageRight;
@end
UIButton+ImageAndTitle.m
#import "UIButton+ImageAndTitle.h"
#define DEFULT_SPACE 6.0f
@implementation UIButton (ImageAndTitle)
- (void)zoomImage:(CGFloat)times
{
UIImage *image = self.imageView.image;
if (image != nil) {
[self setImage:[self scaleImage:image toScale:times] forState:UIControlStateNormal];
}
}
- (UIImage *)scaleImage:(UIImage *)image toScale:(float)scaleSize
{
UIGraphicsBeginImageContext(CGSizeMake(image.size.width * scaleSize, image.size.height * scaleSize));
[image drawInRect:CGRectMake(0, 0, image.size.width * scaleSize, image.size.height * scaleSize)];
UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return scaledImage;
}
- (void)setImageAndTitleCenter
{
CGSize titleSize = self.titleLabel.frame.size;
self.imageEdgeInsets = UIEdgeInsetsMake(0.0, 0.0, 0.0, -titleSize.width);
CGSize imageSize = self.imageView.frame.size;
self.titleEdgeInsets = UIEdgeInsetsMake(0.0, -imageSize.width, 0.0, 0.0);
}
- (void)setImageUp:(CGFloat)space
{
CGSize imageSize = self.imageView.frame.size;
self.titleEdgeInsets = UIEdgeInsetsMake(0.0, -imageSize.width, -(imageSize.height + space / 2), 0.0);
CGSize titleSize = self.titleLabel.frame.size;
self.imageEdgeInsets = UIEdgeInsetsMake(-(titleSize.height + space / 2), 0.0, 0.0, -titleSize.width);
}
- (void)setImageUp
{
[self setImageUp:DEFULT_SPACE];
}
- (void)setImageDown:(CGFloat)space
{
CGSize imageSize = self.imageView.frame.size;
self.titleEdgeInsets = UIEdgeInsetsMake(0.0, -imageSize.width, (imageSize.height + space / 2), 0.0);
CGSize titleSize = self.titleLabel.frame.size;
self.imageEdgeInsets = UIEdgeInsetsMake((titleSize.height + space / 2), 0.0, 0.0, -titleSize.width);
}
- (void)setImageDown
{
[self setImageDown:DEFULT_SPACE];
}
- (void)setImageLeft:(CGFloat)space
{
self.titleEdgeInsets = UIEdgeInsetsMake(0.0, 0.0, 0.0, -space / 2);
self.imageEdgeInsets = UIEdgeInsetsMake(0.0, -space / 2, 0.0, 0.0);
}
- (void)setImageLeft
{
[self setImageLeft:DEFULT_SPACE];
}
- (void)setImageRight:(CGFloat)space
{
CGSize imageSize = self.imageView.frame.size;
self.titleEdgeInsets = UIEdgeInsetsMake(0.0, -(imageSize.width * 2 + space / 2), 0.0, 0.0);
CGSize titleSize = self.titleLabel.frame.size;
self.imageEdgeInsets = UIEdgeInsetsMake(0.0, 0.0, 0.0, -(titleSize.width * 2 + space / 2));
}
- (void)setImageRight
{
[self setImageRight:DEFULT_SPACE];
}
- (void)setTitleCenterAndImageLeft:(CGFloat)space
{
CGSize imageSize = self.imageView.frame.size;
self.titleEdgeInsets = UIEdgeInsetsMake(0.0, -imageSize.width, 0.0, 0.0);
self.imageEdgeInsets = UIEdgeInsetsMake(0.0, -(space + imageSize.width), 0.0, 0.0);
}
- (void)setTitleCenterAndImageLeft
{
[self setTitleCenterAndImageLeft:DEFULT_SPACE];
}
- (void)setTitleCenterAndImageRight:(CGFloat)space
{
CGSize imageSize = self.imageView.frame.size;
self.titleEdgeInsets = UIEdgeInsetsMake(0.0, -imageSize.width, 0.0, 0.0);
CGSize titleSize = self.titleLabel.frame.size;
self.imageEdgeInsets = UIEdgeInsetsMake(0.0, 0.0, 0.0, -(space + 2 * titleSize.width + imageSize.width));
}
- (void)setTitleCenterAndImageRight
{
[self setTitleCenterAndImageRight:DEFULT_SPACE];
}
@end