UIView+Extention.m 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. #import "UIView+Extention.h"
  2. @implementation UIView (Extention)
  3. - (void)setX:(CGFloat)x{
  4. CGRect frame =self.frame;
  5. frame.origin.x = x;
  6. self.frame = frame;
  7. }
  8. - (CGFloat)x{
  9. return self.frame.origin.x;
  10. }
  11. - (void)setY:(CGFloat)y{
  12. CGRect frame =self.frame;
  13. frame.origin.y = y;
  14. self.frame = frame;
  15. }
  16. - (CGFloat)y{
  17. return self.frame.origin.y;
  18. }
  19. - (void)setHeight:(CGFloat)height{
  20. CGRect frame =self.frame;
  21. frame.size.height = height;
  22. self.frame = frame;
  23. }
  24. - (CGFloat)height{
  25. return self.frame.size.height;
  26. }
  27. - (void)setWidth:(CGFloat)width{
  28. CGRect frame =self.frame;
  29. frame.size.width = width;
  30. self.frame = frame;
  31. }
  32. - (CGFloat)width{
  33. return self.frame.size.width;
  34. }
  35. - (void)setCenterX:(CGFloat)centerX
  36. {
  37. CGPoint point =self.center;
  38. point.x = centerX;
  39. self.center = point;
  40. }
  41. - (CGFloat)centerX
  42. {
  43. return self.center.x;
  44. }
  45. - (void)setCenterY:(CGFloat)centerY{
  46. CGPoint point =self.center;
  47. point.y = centerY;
  48. self.center = point;
  49. }
  50. - (CGFloat)centerY
  51. {
  52. return self.center.y;
  53. }
  54. - (void)setOrigin:(CGPoint)origin{
  55. CGRect frame =self.frame;
  56. frame.origin = origin;
  57. self.frame = frame;
  58. }
  59. - (CGPoint)origin{
  60. return self.frame.origin;
  61. }
  62. - (void)setSize:(CGSize)size{
  63. CGRect frame =self.frame;
  64. frame.size = size;
  65. self.frame = frame;
  66. }
  67. - (CGSize)size{
  68. return self.frame.size;
  69. }
  70. - (void)addGradientLayerWithColors:(NSArray<UIColor *> *)colors
  71. direction:(GradientLayerDirection)direction
  72. size:(CGSize)size {
  73. CAGradientLayer *gradientLayer = [CAGradientLayer layer];
  74. gradientLayer.frame = CGRectMake(0, 0, size.width, size.height);
  75. NSMutableArray *array = [NSMutableArray array];
  76. for (UIColor *color in colors) {
  77. [array addObject:(__bridge id)color.CGColor];
  78. }
  79. gradientLayer.colors = array;
  80. switch (direction) {
  81. case GradientLayerDirection_V:
  82. {
  83. gradientLayer.startPoint = CGPointMake(0.5, 0.0); // 顶部中间
  84. gradientLayer.endPoint = CGPointMake(0.5, 1.0); // 底部中间
  85. }
  86. break;
  87. case GradientLayerDirection_H:
  88. {
  89. gradientLayer.startPoint = CGPointMake(0, 0.5); // 顶部中间
  90. gradientLayer.endPoint = CGPointMake(1, 0.5); // 底部中间
  91. }
  92. break;
  93. }
  94. [self.layer insertSublayer:gradientLayer atIndex:0];
  95. }
  96. - (void)setCornerRadius:(CGFloat)cornerRadius {
  97. self.layer.cornerRadius = cornerRadius;
  98. self.layer.masksToBounds = YES;
  99. }
  100. - (void)addGradientLayerWithColors:(NSArray<UIColor *> *)colors
  101. direction:(GradientLayerDirection)direction
  102. frame:(CGRect)frame
  103. roundingCorners:(UIRectCorner)corners
  104. cornerRadii:(CGFloat)cornerRadii {
  105. NSString *name = @"k_gradientLayer";
  106. for (CALayer *layer in self.layer.sublayers) {
  107. if ([layer.name isEqualToString:name]) {
  108. [layer removeFromSuperlayer];
  109. break;
  110. }
  111. }
  112. CAGradientLayer *gradientLayer = [CAGradientLayer layer];
  113. gradientLayer.name = name;
  114. gradientLayer.frame = frame;
  115. NSMutableArray *array = [NSMutableArray array];
  116. for (UIColor *color in colors) {
  117. [array addObject:(__bridge id)color.CGColor];
  118. }
  119. gradientLayer.colors = array;
  120. switch (direction) {
  121. case GradientLayerDirection_V:
  122. {
  123. gradientLayer.startPoint = CGPointMake(0.5, 0.0); // 顶部中间
  124. gradientLayer.endPoint = CGPointMake(0.5, 1.0); // 底部中间
  125. }
  126. break;
  127. case GradientLayerDirection_H:
  128. {
  129. gradientLayer.startPoint = CGPointMake(0, 0.5); // 顶部中间
  130. gradientLayer.endPoint = CGPointMake(1, 0.5); // 底部中间
  131. }
  132. break;
  133. }
  134. // 自定义圆角路径(比如只圆左上和右下角)
  135. UIBezierPath *roundedPath = [UIBezierPath bezierPathWithRoundedRect:gradientLayer.bounds
  136. byRoundingCorners:corners
  137. cornerRadii:CGSizeMake(cornerRadii, cornerRadii)];
  138. // 创建 shape layer 作为 mask
  139. CAShapeLayer *maskLayer = [CAShapeLayer layer];
  140. maskLayer.path = roundedPath.CGPath;
  141. // 设置 mask
  142. gradientLayer.mask = maskLayer;
  143. // 添加到 view 上
  144. [self.layer insertSublayer:gradientLayer atIndex:0];
  145. }
  146. - (void)configShadow:(CGFloat)cornerRadius
  147. shadowColor:(UIColor *)shadowColor
  148. size:(CGSize)size {
  149. self.layer.shadowColor = shadowColor.CGColor; // 阴影颜色
  150. self.layer.shadowOpacity = 0.3; // 阴影透明度(0~1)
  151. self.layer.shadowOffset = CGSizeMake(0, 2); // 阴影偏移(x, y)
  152. self.layer.shadowRadius = 3; // 模糊半径
  153. self.layer.masksToBounds = NO; // 必须为 NO,阴影才能显示在边界外
  154. self.layer.cornerRadius = cornerRadius;
  155. CGRect rect = CGRectMake(0, 0, size.width, size.height);
  156. self.layer.shadowPath = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:cornerRadius].CGPath;
  157. }
  158. @end