BDFaceAdjustParamsRootCell.m 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. //
  2. // BDFaceAdjustParamsRootCell.m
  3. // FaceSDKSample_IOS
  4. //
  5. // Created by Zhang,Jian(MBD) on 2020/12/1.
  6. // Copyright © 2020 Baidu. All rights reserved.
  7. //
  8. #import "BDFaceAdjustParamsRootCell.h"
  9. #import "BDFaceAdjustParamsConstants.h"
  10. #import "UIColor+BDFaceColorUtils.h"
  11. @interface BDFaceAdjustParamsRootCell()
  12. @property(nonatomic, strong) UIView *seperator;
  13. @property(nonatomic, assign) BDFaceCellPostionType postionType; // 在section里只有一个cell
  14. @property(nonatomic, strong) CAShapeLayer *maskLayer;
  15. @property(nonatomic, strong) CALayer *borderLayer;
  16. @property(nonatomic, strong) CALayer *layerForHiding;
  17. @end
  18. @implementation BDFaceAdjustParamsRootCell
  19. - (void)awakeFromNib {
  20. [super awakeFromNib];
  21. // Initialization code
  22. }
  23. - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
  24. [super setSelected:selected animated:animated];
  25. // Configure the view for the selected state
  26. }
  27. - (void)cellFinishLoad:(NSInteger)rowsInSection {
  28. // do nothing
  29. if (!self.seperator) {
  30. self.seperator = [[UIView alloc] init];
  31. [self.contentView addSubview:self.seperator];
  32. self.seperator.backgroundColor = [self.class seperatorColor];
  33. }
  34. if (rowsInSection == 1) {
  35. self.postionType = BDFaceCellPostionTypeOnlyOneCell;
  36. } else if (self.indexPath.row == 0 && rowsInSection > 1) {
  37. self.postionType = BDFaceCellPostionTypeMoreThanOneFirst;
  38. } else if (self.indexPath.row == (rowsInSection - 1) && rowsInSection > 1){
  39. self.postionType = BDFaceCellPostionTypeMoreThanOneLast;
  40. } else {
  41. self.postionType = BDFaceCellPostionTypeMoreThanOneMiddle;
  42. }
  43. }
  44. + (UIColor *)seperatorColor {
  45. return [UIColor clearColor];
  46. }
  47. - (void)layoutSubviews {
  48. [super layoutSubviews];
  49. self.seperator.frame = CGRectMake(0, CGRectGetHeight(self.frame) - 1.0f / UIScreen.mainScreen.scale, CGRectGetWidth(self.frame), 1.0f / UIScreen.mainScreen.scale);
  50. }
  51. + (CGFloat)HeightOfFaceAdjustCell {
  52. return 10.0;
  53. }
  54. - (void)setConerRadius:(float)cornerRadius
  55. borderWidth:(CGFloat)borderWidth
  56. borderColor:(nullable CGColorRef)borderColor {
  57. self.layer.mask = nil;
  58. [self.maskLayer removeFromSuperlayer];
  59. self.maskLayer = nil;
  60. [self.borderLayer removeFromSuperlayer];
  61. self.borderLayer = nil;
  62. [self.layerForHiding removeFromSuperlayer];
  63. self.layerForHiding = nil;
  64. if (!borderColor) {
  65. borderColor = [UIColor face_colorWithRGBHex:BDFaceAdjustParamsSeperatorColor].CGColor;
  66. }
  67. BOOL hideBorder = NO;
  68. UIRectCorner corner;
  69. switch (self.postionType) {
  70. case BDFaceCellPostionTypeOnlyOneCell:
  71. {
  72. corner = UIRectCornerAllCorners;
  73. hideBorder = NO;
  74. }
  75. break;
  76. case BDFaceCellPostionTypeMoreThanOneMiddle:
  77. {
  78. corner = UIRectCornerAllCorners;
  79. cornerRadius = 0;
  80. hideBorder = YES;
  81. }
  82. break;
  83. case BDFaceCellPostionTypeMoreThanOneFirst:
  84. {
  85. corner = UIRectCornerTopLeft | UIRectCornerTopRight;
  86. hideBorder = NO;
  87. }
  88. break;
  89. case BDFaceCellPostionTypeMoreThanOneLast:
  90. {
  91. corner = UIRectCornerBottomLeft | UIRectCornerBottomRight;
  92. hideBorder = YES;
  93. }
  94. break;
  95. default:
  96. break;
  97. }
  98. UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:self.bounds byRoundingCorners:corner cornerRadii:CGSizeMake(cornerRadius, cornerRadius)];
  99. CAShapeLayer * layer = [[CAShapeLayer alloc]init];
  100. layer.frame = self.bounds;
  101. layer.path = path.CGPath;
  102. self.layer.mask = layer;
  103. self.maskLayer = layer;
  104. float borderWith = borderWidth;
  105. CAShapeLayer *borderShape = [CAShapeLayer layer];
  106. borderShape.frame = self.bounds;
  107. borderShape.path = path.CGPath;
  108. borderShape.strokeColor = borderColor;
  109. borderShape.fillColor = nil;
  110. borderShape.lineWidth = borderWith;
  111. [self.layer addSublayer:borderShape];
  112. self.borderLayer = borderShape;
  113. if (hideBorder) {
  114. float hiddenBorderWidth = borderWidth;
  115. CALayer *hiddenBorder = [CALayer layer];
  116. hiddenBorder.frame = CGRectMake(hiddenBorderWidth, 0, CGRectGetWidth(self.bounds) - hiddenBorderWidth * 2 , hiddenBorderWidth);
  117. hiddenBorder.backgroundColor = self.backgroundColor.CGColor;
  118. [borderShape addSublayer:hiddenBorder];
  119. self.layerForHiding = hiddenBorder;
  120. }
  121. }
  122. @end