|
typedef NS_ENUM(NSUInteger, ZDImagePosition) { |
|
ZDImagePosition_Left = 0, |
|
ZDImagePosition_Right, |
|
ZDImagePosition_Top, |
|
ZDImagePosition_Bottom |
|
}; |
|
|
|
@implementation UIButton (ZDUtility) |
|
|
|
- (void)zd_imagePosition:(ZDImagePosition)postion spacing:(CGFloat)spacing { |
|
[self setTitle:self.currentTitle forState:UIControlStateNormal]; |
|
[self setImage:self.currentImage forState:UIControlStateNormal]; |
|
|
|
CGFloat imageWidth = self.imageView.image.size.width; |
|
CGFloat imageHeight = self.imageView.image.size.height; |
|
|
|
CGSize labelSize = [self.titleLabel.text sizeWithAttributes:@{NSFontAttributeName : self.titleLabel.font}]; |
|
CGFloat labelWidth = labelSize.width; |
|
CGFloat labelHeight = labelSize.height; |
|
|
|
CGFloat imageOffsetX = (imageWidth + labelWidth) / 2.0f - imageWidth / 2.0f;//image中心移动的x距离 |
|
CGFloat imageOffsetY = imageHeight / 2.0f + spacing / 2.0f;//image中心移动的y距离 |
|
CGFloat labelOffsetX = (imageWidth + labelWidth / 2.0f) - (imageWidth + labelWidth) / 2.0f;//label中心移动的x距离 |
|
CGFloat labelOffsetY = labelHeight / 2.0f + spacing / 2.0f;//label中心移动的y距离 |
|
|
|
CGFloat tempWidth = MAX(labelWidth, imageWidth); |
|
CGFloat changedWidth = labelWidth + imageWidth - tempWidth; |
|
CGFloat tempHeight = MAX(labelHeight, imageHeight); |
|
CGFloat changedHeight = labelHeight + imageHeight + spacing - tempHeight; |
|
|
|
switch (postion) { |
|
case ZDImagePosition_Left: |
|
self.imageEdgeInsets = UIEdgeInsetsMake(0, -spacing/2.0f, 0, spacing/2.0f); |
|
self.titleEdgeInsets = UIEdgeInsetsMake(0, spacing/2.0f, 0, -spacing/2.0f); |
|
self.contentEdgeInsets = UIEdgeInsetsMake(0, spacing/2.0f, 0, spacing/2.0f); |
|
break; |
|
|
|
case ZDImagePosition_Right: |
|
self.imageEdgeInsets = UIEdgeInsetsMake(0, labelWidth + spacing/2.0f, 0, -(labelWidth + spacing/2.0f)); |
|
self.titleEdgeInsets = UIEdgeInsetsMake(0, -(imageWidth + spacing/2.0f), 0, imageWidth + spacing/2.0f); |
|
self.contentEdgeInsets = UIEdgeInsetsMake(0, spacing/2.0f, 0, spacing/2.0f); |
|
break; |
|
|
|
case ZDImagePosition_Top: |
|
self.imageEdgeInsets = UIEdgeInsetsMake(-imageOffsetY, imageOffsetX, imageOffsetY, -imageOffsetX); |
|
self.titleEdgeInsets = UIEdgeInsetsMake(labelOffsetY, -labelOffsetX, -labelOffsetY, labelOffsetX); |
|
self.contentEdgeInsets = UIEdgeInsetsMake(imageOffsetY, -changedWidth/2.0f, changedHeight-imageOffsetY, -changedWidth/2.0f); |
|
break; |
|
|
|
case ZDImagePosition_Bottom: |
|
self.imageEdgeInsets = UIEdgeInsetsMake(imageOffsetY, imageOffsetX, -imageOffsetY, -imageOffsetX); |
|
self.titleEdgeInsets = UIEdgeInsetsMake(-labelOffsetY, -labelOffsetX, labelOffsetY, labelOffsetX); |
|
self.contentEdgeInsets = UIEdgeInsetsMake(changedHeight-imageOffsetY, -changedWidth/2.0f, imageOffsetY, -changedWidth/2.0f); |
|
break; |
|
|
|
default: |
|
break; |
|
} |
|
} |
|
|
|
@end |