SQCustomButton.m 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. //
  2. // SQCustomButton.m
  3. // SQCustomButton
  4. //
  5. // Created by yangsq on 2017/9/12.
  6. // Copyright © 2017年 yangsq. All rights reserved.
  7. //
  8. #import "SQCustomButton.h"
  9. @interface SQCustomButton ()
  10. @property (nonatomic, strong) UIView *backgroudView;
  11. @end
  12. @implementation SQCustomButton
  13. - (id)initWithFrame:(CGRect)frame type:(SQCustomButtonType)type imageSize:(CGSize)imageSize midmargin:(CGFloat)midmargin{
  14. if (self = [super initWithFrame:frame]) {
  15. UIView *tempView = [UIView new];
  16. [self addSubview:tempView];
  17. tempView.translatesAutoresizingMaskIntoConstraints = NO;
  18. _imageView = [UIImageView new];
  19. [tempView addSubview:_imageView];
  20. _imageView.translatesAutoresizingMaskIntoConstraints = NO;
  21. _titleLabel = [UILabel new];
  22. _titleLabel.font = [UIFont systemFontOfSize:14];
  23. [tempView addSubview:_titleLabel];
  24. _titleLabel.translatesAutoresizingMaskIntoConstraints = NO;
  25. _backgroudView = [UIView new];
  26. _backgroudView.backgroundColor = [[UIColor lightGrayColor]colorWithAlphaComponent:0.3];
  27. _backgroudView.translatesAutoresizingMaskIntoConstraints = NO;
  28. _backgroudView.hidden = YES;
  29. [self addSubview:_backgroudView];
  30. NSLayoutConstraint *bg_top = [NSLayoutConstraint constraintWithItem:_backgroudView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeTop multiplier:1 constant:0];
  31. NSLayoutConstraint *bg_left = [NSLayoutConstraint constraintWithItem:_backgroudView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeLeft multiplier:1 constant:0];
  32. NSLayoutConstraint *bg_bottom = [NSLayoutConstraint constraintWithItem:_backgroudView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeBottom multiplier:1 constant:0];
  33. NSLayoutConstraint *bg_right = [NSLayoutConstraint constraintWithItem:_backgroudView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeRight multiplier:1 constant:0];
  34. [self addConstraints:@[bg_top,bg_left,bg_bottom,bg_right]];
  35. NSLayoutConstraint *temp_centerX = [NSLayoutConstraint constraintWithItem:tempView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeCenterX multiplier:1 constant:0];
  36. NSLayoutConstraint *temp_centerY = [NSLayoutConstraint constraintWithItem:tempView attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeCenterY multiplier:1 constant:0];
  37. [self addConstraints:@[temp_centerX,temp_centerY]];
  38. if (type == SQCustomButtonLeftImageType) {
  39. [self removeConstraint:temp_centerY];
  40. NSLayoutConstraint *temp_top = [NSLayoutConstraint constraintWithItem:tempView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeTop multiplier:1 constant:0];
  41. NSLayoutConstraint *temp_bottom = [NSLayoutConstraint constraintWithItem:tempView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeBottom multiplier:1 constant:0];
  42. [self addConstraints:@[temp_top,temp_bottom]];
  43. NSLayoutConstraint *image_left = [NSLayoutConstraint constraintWithItem:_imageView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:tempView attribute:NSLayoutAttributeLeft multiplier:1 constant:0];
  44. NSLayoutConstraint *image_width = [NSLayoutConstraint constraintWithItem:_imageView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:imageSize.width];
  45. NSLayoutConstraint *image_height = [NSLayoutConstraint constraintWithItem:_imageView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:imageSize.height];
  46. NSLayoutConstraint *image_centerY = [NSLayoutConstraint constraintWithItem:_imageView attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:tempView attribute:NSLayoutAttributeCenterY multiplier:1 constant:0];
  47. [_imageView addConstraints:@[image_width,image_height]];
  48. [tempView addConstraints:@[image_centerY,image_left]];
  49. NSLayoutConstraint *label_left = [NSLayoutConstraint constraintWithItem:_titleLabel attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:_imageView attribute:NSLayoutAttributeRight multiplier:1 constant:midmargin];
  50. NSLayoutConstraint *label_centerY = [NSLayoutConstraint constraintWithItem:_titleLabel attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:tempView attribute:NSLayoutAttributeCenterY multiplier:1 constant:0];
  51. NSLayoutConstraint *label_right = [NSLayoutConstraint constraintWithItem:_titleLabel attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:tempView attribute:NSLayoutAttributeRight multiplier:1 constant:0];
  52. [tempView addConstraints:@[label_left,label_centerY,label_right]];
  53. }
  54. if (type == SQCustomButtonTopImageType) {
  55. _titleLabel.textAlignment = NSTextAlignmentCenter;
  56. NSLayoutConstraint *image_top = [NSLayoutConstraint constraintWithItem:_imageView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:tempView attribute:NSLayoutAttributeTop multiplier:1 constant:0];
  57. NSLayoutConstraint *image_width = [NSLayoutConstraint constraintWithItem:_imageView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:imageSize.width];
  58. NSLayoutConstraint *image_height = [NSLayoutConstraint constraintWithItem:_imageView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:imageSize.height];
  59. NSLayoutConstraint *image_centerX = [NSLayoutConstraint constraintWithItem:_imageView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:tempView attribute:NSLayoutAttributeCenterX multiplier:1 constant:0];
  60. [_imageView addConstraints:@[image_width,image_height]];
  61. [tempView addConstraints:@[image_centerX,image_top]];
  62. NSLayoutConstraint *label_top = [NSLayoutConstraint constraintWithItem:_titleLabel attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:_imageView attribute:NSLayoutAttributeBottom multiplier:1 constant:midmargin];
  63. NSLayoutConstraint *label_left = [NSLayoutConstraint constraintWithItem:_titleLabel attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:tempView attribute:NSLayoutAttributeLeft multiplier:1 constant:0];
  64. NSLayoutConstraint *label_right = [NSLayoutConstraint constraintWithItem:_titleLabel attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:tempView attribute:NSLayoutAttributeRight multiplier:1 constant:0];
  65. NSLayoutConstraint *label_bottom = [NSLayoutConstraint constraintWithItem:_titleLabel attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:tempView attribute:NSLayoutAttributeBottom multiplier:1 constant:0];
  66. [tempView addConstraints:@[label_top,label_left,label_right,label_bottom]];
  67. }
  68. if (type == SQCustomButtonRightImageType) {
  69. [self removeConstraint:temp_centerY];
  70. NSLayoutConstraint *temp_top = [NSLayoutConstraint constraintWithItem:tempView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeTop multiplier:1 constant:0];
  71. NSLayoutConstraint *temp_bottom = [NSLayoutConstraint constraintWithItem:tempView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeBottom multiplier:1 constant:0];
  72. [self addConstraints:@[temp_top,temp_bottom]];
  73. NSLayoutConstraint *image_right = [NSLayoutConstraint constraintWithItem:_imageView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:tempView attribute:NSLayoutAttributeRight multiplier:1 constant:0];
  74. NSLayoutConstraint *image_width = [NSLayoutConstraint constraintWithItem:_imageView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:imageSize.width];
  75. NSLayoutConstraint *image_height = [NSLayoutConstraint constraintWithItem:_imageView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:imageSize.height];
  76. NSLayoutConstraint *image_centerY = [NSLayoutConstraint constraintWithItem:_imageView attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:tempView attribute:NSLayoutAttributeCenterY multiplier:1 constant:0];
  77. [_imageView addConstraints:@[image_width,image_height]];
  78. [tempView addConstraints:@[image_centerY,image_right]];
  79. NSLayoutConstraint *label_left = [NSLayoutConstraint constraintWithItem:_titleLabel attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:tempView attribute:NSLayoutAttributeLeft multiplier:1 constant:0];
  80. NSLayoutConstraint *label_centerY = [NSLayoutConstraint constraintWithItem:_titleLabel attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:tempView attribute:NSLayoutAttributeCenterY multiplier:1 constant:0];
  81. NSLayoutConstraint *label_right = [NSLayoutConstraint constraintWithItem:_titleLabel attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:_imageView attribute:NSLayoutAttributeLeft multiplier:1 constant:-(midmargin)];
  82. [tempView addConstraints:@[label_left,label_centerY,label_right]];
  83. }
  84. }
  85. return self;
  86. }
  87. - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
  88. if (self.touchBlock) {
  89. self.touchBlock(self);
  90. }
  91. if (self.isShowSelectBackgroudColor) {
  92. self.backgroudView.hidden = NO;
  93. }
  94. }
  95. - (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
  96. if (self.isShowSelectBackgroudColor) {
  97. self.backgroudView.hidden = YES;
  98. }
  99. }
  100. - (void)touchAction:(void (^)(SQCustomButton * _Nonnull))block{
  101. self.touchBlock = block;
  102. }
  103. /*
  104. // Only override drawRect: if you perform custom drawing.
  105. // An empty implementation adversely affects performance during animation.
  106. - (void)drawRect:(CGRect)rect {
  107. // Drawing code
  108. }
  109. */
  110. @end