SLButton.m 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. //
  2. // EBButton.m
  3. // ZGEBook
  4. //
  5. // Created by wsl on 2020/4/23.
  6. // Copyright © 2020 ZGEBook. All rights reserved.
  7. //
  8. #import "SLButton.h"
  9. @interface SLButton ()
  10. @end
  11. @implementation SLButton
  12. #pragma mark - Override
  13. - (instancetype)init {
  14. self = [super init];
  15. if (self) {
  16. }
  17. return self;
  18. }
  19. - (void)didMoveToSuperview {
  20. if (self.superview) {
  21. [self addSubview:self.imageView];
  22. [self addSubview:self.titleLabel];
  23. }
  24. }
  25. - (void)didMoveToWindow {
  26. if (self.superview) {
  27. [self addSubview:self.imageView];
  28. [self addSubview:self.titleLabel];
  29. }
  30. }
  31. #pragma mark - Getter
  32. - (UIImageView *)imageView {
  33. if (!_imageView) {
  34. _imageView = [[UIImageView alloc] init];
  35. // _imageView.backgroundColor = [UIColor greenColor];
  36. }
  37. return _imageView;
  38. }
  39. - (UILabel *)titleLabel {
  40. if (!_titleLabel) {
  41. _titleLabel = [[UILabel alloc] init];
  42. // _titleLabel.backgroundColor = [UIColor greenColor];
  43. }
  44. return _titleLabel;
  45. }
  46. #pragma mark - Public Methods
  47. /// 设置文本和图片的位置
  48. - (void)setTitleImageLayoutStyle:(SLButtonStyle)titleImageStyle space:(CGFloat)space {
  49. switch (titleImageStyle) {
  50. case SLButtonStyleImageLeft:
  51. [self imageLeft:space];
  52. break;
  53. case SLButtonStyleImageRight:
  54. [self imageRight:space];
  55. break;
  56. case SLButtonStyleImageTop:
  57. [self imageTop:space];
  58. break;
  59. case SLButtonStyleImageBottom:
  60. [self imageBottom:space];
  61. break;
  62. default:
  63. break;
  64. }
  65. }
  66. - (void)imageLeft:(CGFloat)space {
  67. CGSize imageSize = self.imageView.image.size;
  68. CGSize titleSize = [self.titleLabel sizeThatFits:CGSizeZero];
  69. [self.imageView mas_remakeConstraints:^(MASConstraintMaker *make) {
  70. make.centerY.mas_equalTo(self.mas_centerY);
  71. make.size.mas_equalTo(imageSize);
  72. make.centerX.mas_equalTo(self.mas_centerX).offset(-imageSize.width/2.0-space/2.0);
  73. }];
  74. [self.titleLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
  75. make.centerY.mas_equalTo(self.mas_centerY);
  76. make.size.mas_equalTo(titleSize);
  77. make.centerX.mas_equalTo(self.mas_centerX).offset(titleSize.width/2.0+space/2.0);
  78. }];
  79. }
  80. - (void)imageRight:(CGFloat)space {
  81. CGSize imageSize = self.imageView.image.size;
  82. CGSize titleSize = [self.titleLabel sizeThatFits:CGSizeZero];
  83. [self.imageView mas_remakeConstraints:^(MASConstraintMaker *make) {
  84. make.centerY.mas_equalTo(self.mas_centerY);
  85. make.size.mas_equalTo(imageSize);
  86. make.centerX.mas_equalTo(self.mas_centerX).offset(imageSize.width/2.0+space/2.0);
  87. }];
  88. [self.titleLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
  89. make.centerY.mas_equalTo(self.mas_centerY);
  90. make.size.mas_equalTo(titleSize);
  91. make.centerX.mas_equalTo(self.mas_centerX).offset(-titleSize.width/2.0-space/2.0);
  92. }];
  93. }
  94. - (void)imageTop:(CGFloat)space {
  95. CGSize imageSize = self.imageView.image.size;
  96. CGSize titleSize = [self.titleLabel sizeThatFits:CGSizeZero];
  97. CGFloat heightGap = imageSize.height - titleSize.height; //高度差距
  98. [self.imageView mas_remakeConstraints:^(MASConstraintMaker *make) {
  99. make.centerX.mas_equalTo(self.mas_centerX);
  100. make.size.mas_equalTo(imageSize);
  101. make.centerY.mas_equalTo(self.mas_centerY).offset(-imageSize.height/2.0-space/2.0 + heightGap/2.0);
  102. }];
  103. [self.titleLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
  104. make.centerX.mas_equalTo(self.mas_centerX);
  105. make.size.mas_equalTo(titleSize);
  106. make.centerY.mas_equalTo(self.mas_centerY).offset(titleSize.height/2.0+space/2.0 + heightGap/2.0);
  107. }];
  108. }
  109. - (void)imageBottom:(CGFloat)space {
  110. CGSize imageSize = self.imageView.image.size;
  111. CGSize titleSize = [self.titleLabel sizeThatFits:CGSizeZero];
  112. [self.imageView mas_remakeConstraints:^(MASConstraintMaker *make) {
  113. make.centerX.mas_equalTo(self.mas_centerX);
  114. make.size.mas_equalTo(imageSize);
  115. make.centerY.mas_equalTo(self.mas_centerY).offset(imageSize.height/2.0+space/2.0);
  116. }];
  117. [self.titleLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
  118. make.centerX.mas_equalTo(self.mas_centerX);
  119. make.size.mas_equalTo(titleSize);
  120. make.centerY.mas_equalTo(self.mas_centerY).offset(-titleSize.height/2.0-space/2.0);
  121. }];
  122. }
  123. @end