SLButton.m 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  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. @weakify(self)
  68. CGSize imageSize = self.imageView.image.size;
  69. CGSize titleSize = [self.titleLabel sizeThatFits:CGSizeZero];
  70. [self.imageView mas_remakeConstraints:^(MASConstraintMaker *make) {
  71. @strongify(self)
  72. make.centerY.mas_equalTo(self.mas_centerY);
  73. make.size.mas_equalTo(imageSize);
  74. make.centerX.mas_equalTo(self.mas_centerX).offset(-imageSize.width/2.0-space/2.0);
  75. }];
  76. [self.titleLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
  77. @strongify(self)
  78. make.centerY.mas_equalTo(self.mas_centerY);
  79. make.size.mas_equalTo(titleSize);
  80. make.centerX.mas_equalTo(self.mas_centerX).offset(titleSize.width/2.0+space/2.0);
  81. }];
  82. }
  83. - (void)imageRight:(CGFloat)space {
  84. @weakify(self)
  85. CGSize imageSize = self.imageView.image.size;
  86. CGSize titleSize = [self.titleLabel sizeThatFits:CGSizeZero];
  87. [self.imageView mas_remakeConstraints:^(MASConstraintMaker *make) {
  88. @strongify(self)
  89. make.centerY.mas_equalTo(self.mas_centerY);
  90. make.size.mas_equalTo(imageSize);
  91. make.centerX.mas_equalTo(self.mas_centerX).offset(imageSize.width/2.0+space/2.0);
  92. }];
  93. [self.titleLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
  94. @strongify(self)
  95. make.centerY.mas_equalTo(self.mas_centerY);
  96. make.size.mas_equalTo(titleSize);
  97. make.centerX.mas_equalTo(self.mas_centerX).offset(-titleSize.width/2.0-space/2.0);
  98. }];
  99. }
  100. - (void)imageTop:(CGFloat)space {
  101. @weakify(self)
  102. CGSize imageSize = self.imageView.image.size;
  103. CGSize titleSize = [self.titleLabel sizeThatFits:CGSizeZero];
  104. CGFloat heightGap = imageSize.height - titleSize.height; //高度差距
  105. [self.imageView mas_remakeConstraints:^(MASConstraintMaker *make) {
  106. @strongify(self)
  107. make.centerX.mas_equalTo(self.mas_centerX);
  108. make.size.mas_equalTo(imageSize);
  109. make.centerY.mas_equalTo(self.mas_centerY).offset(-imageSize.height/2.0-space/2.0 + heightGap/2.0);
  110. }];
  111. [self.titleLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
  112. @strongify(self)
  113. make.centerX.mas_equalTo(self.mas_centerX);
  114. make.size.mas_equalTo(titleSize);
  115. make.centerY.mas_equalTo(self.mas_centerY).offset(titleSize.height/2.0+space/2.0 + heightGap/2.0);
  116. }];
  117. }
  118. - (void)imageBottom:(CGFloat)space {
  119. @weakify(self)
  120. CGSize imageSize = self.imageView.image.size;
  121. CGSize titleSize = [self.titleLabel sizeThatFits:CGSizeZero];
  122. [self.imageView mas_remakeConstraints:^(MASConstraintMaker *make) {
  123. @strongify(self)
  124. make.centerX.mas_equalTo(self.mas_centerX);
  125. make.size.mas_equalTo(imageSize);
  126. make.centerY.mas_equalTo(self.mas_centerY).offset(imageSize.height/2.0+space/2.0);
  127. }];
  128. [self.titleLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
  129. @strongify(self)
  130. make.centerX.mas_equalTo(self.mas_centerX);
  131. make.size.mas_equalTo(titleSize);
  132. make.centerY.mas_equalTo(self.mas_centerY).offset(-titleSize.height/2.0-space/2.0);
  133. }];
  134. }
  135. @end