Skip to content

Instantly share code, notes, and snippets.

@faimin
Created June 22, 2017 02:26
Show Gist options
  • Save faimin/1e2428dcac16b099622944c84c34ce93 to your computer and use it in GitHub Desktop.
Save faimin/1e2428dcac16b099622944c84c34ce93 to your computer and use it in GitHub Desktop.
permutation image and title postion for button
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment