Button.png实现左文右图(默认)、左图右文、上图下文,上文下图
一句话代码 [btn DDYStyle:DDYStyleImgRight padding:8];
UIButton+DDYStyle.h
// Created by Rain Dou on 15/5/18.
// Copyright © 2015年 634778311 All rights reserved.
#import <UIKit/UIKit.h>
typedef NS_ENUM(NSInteger, DDYStyle) {
DDYStyleDefault = 0, // 左图右文,整体居中,默认状态
DDYStyleImgLeft = 1, // 左图右文,整体居中,设置间隙
DDYStyleImgRight = 2, // 左文右图,整体居中,设置间隙
DDYStyleImgTop = 3, // 上图下文,整体居中,设置间隙
DDYStyleImgBottom = 4, // 下图上文,整体居中,设置间隙
};
@interface UIButton (DDYStyle)
/** style:图文样式 padding:图文间隙 */
- (void)setDDYStyle:(DDYStyle)style padding:(CGFloat)padding;
- (void)DDYStyle:(DDYStyle)style padding:(CGFloat)padding;
@end
UIButton+DDYStyle.m
#import "UIButton+DDYStyle.h"
@implementation UIButton (DDYStyle)
- (void)setDDYStyle:(DDYStyle)style padding:(CGFloat)padding
{
if (self.imageView.image != nil && self.titleLabel.text != nil)
{
// 先还原
self.titleEdgeInsets = UIEdgeInsetsZero;
self.imageEdgeInsets = UIEdgeInsetsZero;
// 上图下文或者上文下图情况重新计算高
CGFloat imageX = self.imageView.ddy_x;
CGFloat titleX = self.titleLabel.ddy_x;
CGFloat imageY = self.imageView.ddy_y;
CGFloat titleY = self.titleLabel.ddy_y;
CGFloat imageW = self.imageView.ddy_w;
CGFloat titleW = self.titleLabel.ddy_w;
CGFloat imageH = self.imageView.ddy_h;
CGFloat titleH = self.titleLabel.ddy_h;
CGFloat totalH = imageH + titleH + padding;
CGFloat selfH = self.ddy_h;
CGFloat selfW = self.ddy_w;
switch (style)
{
case DDYStyleImgLeft:
self.titleEdgeInsets = UIEdgeInsetsMake(0, padding/2.0, 0, -padding/2.0);
self.imageEdgeInsets = UIEdgeInsetsMake(0, -padding/2.0, 0, padding/2.0);
break;
case DDYStyleImgRight:
self.titleEdgeInsets = UIEdgeInsetsMake(0, -(imageW + padding/2.0), 0, (imageW + padding/2.0));
self.imageEdgeInsets = UIEdgeInsetsMake(0, (titleW + padding/2.0), 0, -(titleW + padding/2.0));
break;
case DDYStyleImgTop:
self.titleEdgeInsets = UIEdgeInsetsMake(((selfH - totalH)/2.0 + imageH + padding - titleY),
-(titleX + titleW/2.0 - selfW/2.0),
-((selfH - totalH)/2.0 + imageH + padding - titleY),
(titleX + titleW/2.0 - selfW/2.0));
self.imageEdgeInsets = UIEdgeInsetsMake(((selfH - totalH)/2.0 - imageY),
(selfW/2.0 - imageX - imageW/2.0),
-((selfH - totalH)/2.0 - imageY),
-(selfW/2.0 - imageX - imageW/2.0));
break;
case DDYStyleImgBottom:
NSLog(@"%f",titleX);
self.titleEdgeInsets = UIEdgeInsetsMake(((selfH - totalH)/2.0 - titleY),
-(titleX + titleW/2.0 - selfW/2.0),
-((selfH - totalH)/2.0 - titleY),
(titleX + titleW/2.0 - selfW/2.0));
self.imageEdgeInsets = UIEdgeInsetsMake(((selfH - totalH)/2.0 + titleH + padding - imageY),
(selfW/2.0 - imageX - imageW/2.0),
-((selfH - totalH)/2.0 + titleH + padding - imageY),
-(selfW/2.0 - imageX - imageW/2.0));
break;
default:
break;
}
}
}
- (void)DDYStyle:(DDYStyle)style padding:(CGFloat)padding {
[self setDDYStyle:style padding:padding];
}
@end
附:
用到的viewCategory
UIView+DDYExtension.h
#import <UIKit/UIKit.h>
@interface UIView (DDYExtension)
@property (nonatomic, assign) CGFloat ddy_x;
@property (nonatomic, assign) CGFloat ddy_y;
@property (nonatomic, assign) CGFloat ddy_w;
@property (nonatomic, assign) CGFloat ddy_h;
@property (nonatomic, assign) CGFloat ddy_right;
@property (nonatomic, assign) CGFloat ddy_bottom;
@property (nonatomic, assign) CGFloat ddy_centerX;
@property (nonatomic, assign) CGFloat ddy_centerY;
@property (nonatomic, assign) CGSize ddy_size;
@property (nonatomic, assign) CGPoint ddy_origin;
@end
UIView+DDYExtension.m
#import "UIView+DDYExtension.h"
@implementation UIView (DDYExtension)
/* x的setter和getter方法 */
- (void)setDdy_x:(CGFloat)ddy_x {
CGRect frame = self.frame;
frame.origin.x = ddy_x;
self.frame = frame;
}
- (CGFloat)ddy_x {
return self.frame.origin.x;
}
/* y的setter和getter方法 */
- (void)setDdy_y:(CGFloat)ddy_y {
CGRect frame = self.frame;
frame.origin.y = ddy_y;
self.frame = frame;
}
- (CGFloat)ddy_y {
return self.frame.origin.y;
}
/* width的setter和getter方法 */
- (void)setDdy_w:(CGFloat)ddy_w {
CGRect frame = self.frame;
frame.size.width = ddy_w;
self.frame = frame;
}
- (CGFloat)ddy_w {
return self.frame.size.width;
}
/* height的setter和getter方法 */
- (void)setDdy_h:(CGFloat)ddy_h {
CGRect frame = self.frame;
frame.size.height = ddy_h;
self.frame = frame;
}
- (CGFloat)ddy_h {
return self.frame.size.height;
}
/* centerX的setter和getter方法 */
- (void)setDdy_centerX:(CGFloat)ddy_centerX {
CGPoint center = self.center;
center.x = ddy_centerX;
self.center = center;
}
- (CGFloat)ddy_centerX {
return self.center.x;
}
/* centerY的setter和getter方法 */
- (void)setDdy_centerY:(CGFloat)ddy_centerY {
CGPoint center = self.center;
center.y = ddy_centerY;
self.center = center;
}
- (CGFloat)ddy_centerY {
return self.center.y;
}
/* 右边到 x 轴距离 */
- (void)setDdy_right:(CGFloat)ddy_right {
CGRect frame = self.frame;
frame.origin.x = ddy_right - frame.size.width;
self.frame = frame;
}
- (CGFloat)ddy_right {
return self.frame.origin.x + self.frame.size.width;
}
/* 底边到 y 轴距离 */
- (void)setDdy_bottom:(CGFloat)ddy_bottom {
CGRect frame = self.frame;
frame.origin.y = ddy_bottom - frame.size.height;
self.frame = frame;
}
- (CGFloat)ddy_bottom {
return self.frame.origin.y + self.frame.size.height;
}
/* size的setter和getter方法 */
- (void)setDdy_size:(CGSize)ddy_size {
CGRect frame = self.frame;
frame.size = ddy_size;
self.frame = frame;
}
- (CGSize)ddy_size {
return self.frame.size;
}
/* origin的setter和getter方法 */
- (void)setDdy_origin:(CGPoint)ddy_origin {
CGRect frame = self.frame;
frame.origin = ddy_origin;
self.frame = frame;
}
- (CGPoint)ddy_origin {
return self.frame.origin;
}
@end
网友评论