UIView+Additions.m 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. //
  2. // UIView+Additions.m
  3. // iBee
  4. //
  5. //
  6. #import "UIView+Additions.h"
  7. @implementation UIView (Additions)
  8. ///////////////////////////////////////////////////////////////////////////////////////////////////
  9. - (CGFloat)left {
  10. return self.frame.origin.x;
  11. }
  12. ///////////////////////////////////////////////////////////////////////////////////////////////////
  13. - (void)setLeft:(CGFloat)x {
  14. CGRect frame = self.frame;
  15. frame.origin.x = x;
  16. self.frame = frame;
  17. }
  18. ///////////////////////////////////////////////////////////////////////////////////////////////////
  19. - (CGFloat)top {
  20. return self.frame.origin.y;
  21. }
  22. ///////////////////////////////////////////////////////////////////////////////////////////////////
  23. - (void)setTop:(CGFloat)y {
  24. CGRect frame = self.frame;
  25. frame.origin.y = y;
  26. self.frame = frame;
  27. }
  28. ///////////////////////////////////////////////////////////////////////////////////////////////////
  29. - (CGFloat)right {
  30. return self.frame.origin.x + self.frame.size.width;
  31. }
  32. ///////////////////////////////////////////////////////////////////////////////////////////////////
  33. - (void)setRight:(CGFloat)right {
  34. CGRect frame = self.frame;
  35. frame.origin.x = right - frame.size.width;
  36. self.frame = frame;
  37. }
  38. ///////////////////////////////////////////////////////////////////////////////////////////////////
  39. - (CGFloat)bottom {
  40. return self.frame.origin.y + self.frame.size.height;
  41. }
  42. ///////////////////////////////////////////////////////////////////////////////////////////////////
  43. - (void)setBottom:(CGFloat)bottom {
  44. CGRect frame = self.frame;
  45. frame.origin.y = bottom - frame.size.height;
  46. self.frame = frame;
  47. }
  48. ///////////////////////////////////////////////////////////////////////////////////////////////////
  49. - (CGFloat)centerX {
  50. return self.center.x;
  51. }
  52. ///////////////////////////////////////////////////////////////////////////////////////////////////
  53. - (void)setCenterX:(CGFloat)centerX {
  54. self.center = CGPointMake(centerX, self.center.y);
  55. }
  56. ///////////////////////////////////////////////////////////////////////////////////////////////////
  57. - (CGFloat)centerY {
  58. return self.center.y;
  59. }
  60. ///////////////////////////////////////////////////////////////////////////////////////////////////
  61. - (void)setCenterY:(CGFloat)centerY {
  62. self.center = CGPointMake(self.center.x, centerY);
  63. }
  64. ///////////////////////////////////////////////////////////////////////////////////////////////////
  65. - (CGFloat)width {
  66. return self.frame.size.width;
  67. }
  68. ///////////////////////////////////////////////////////////////////////////////////////////////////
  69. - (void)setWidth:(CGFloat)width {
  70. CGRect frame = self.frame;
  71. frame.size.width = width;
  72. self.frame = frame;
  73. }
  74. ///////////////////////////////////////////////////////////////////////////////////////////////////
  75. - (CGFloat)height {
  76. return self.frame.size.height;
  77. }
  78. ///////////////////////////////////////////////////////////////////////////////////////////////////
  79. - (void)setHeight:(CGFloat)height {
  80. CGRect frame = self.frame;
  81. frame.size.height = height;
  82. self.frame = frame;
  83. }
  84. ///////////////////////////////////////////////////////////////////////////////////////////////////
  85. - (CGFloat)ttScreenX {
  86. CGFloat x = 0.0f;
  87. for (UIView* view = self; view; view = view.superview) {
  88. x += view.left;
  89. }
  90. return x;
  91. }
  92. ///////////////////////////////////////////////////////////////////////////////////////////////////
  93. - (CGFloat)ttScreenY {
  94. CGFloat y = 0.0f;
  95. for (UIView* view = self; view; view = view.superview) {
  96. y += view.top;
  97. }
  98. return y;
  99. }
  100. ///////////////////////////////////////////////////////////////////////////////////////////////////
  101. - (CGFloat)screenViewX {
  102. CGFloat x = 0.0f;
  103. for (UIView* view = self; view; view = view.superview) {
  104. x += view.left;
  105. if ([view isKindOfClass:[UIScrollView class]]) {
  106. UIScrollView* scrollView = (UIScrollView*)view;
  107. x -= scrollView.contentOffset.x;
  108. }
  109. }
  110. return x;
  111. }
  112. ///////////////////////////////////////////////////////////////////////////////////////////////////
  113. - (CGFloat)screenViewY {
  114. CGFloat y = 0;
  115. for (UIView* view = self; view; view = view.superview) {
  116. y += view.top;
  117. if ([view isKindOfClass:[UIScrollView class]]) {
  118. UIScrollView* scrollView = (UIScrollView*)view;
  119. y -= scrollView.contentOffset.y;
  120. }
  121. }
  122. return y;
  123. }
  124. ///////////////////////////////////////////////////////////////////////////////////////////////////
  125. - (CGRect)screenFrame {
  126. return CGRectMake(self.screenViewX, self.screenViewY, self.width, self.height);
  127. }
  128. ///////////////////////////////////////////////////////////////////////////////////////////////////
  129. - (CGPoint)origin {
  130. return self.frame.origin;
  131. }
  132. ///////////////////////////////////////////////////////////////////////////////////////////////////
  133. - (void)setOrigin:(CGPoint)origin {
  134. CGRect frame = self.frame;
  135. frame.origin = origin;
  136. self.frame = frame;
  137. }
  138. ///////////////////////////////////////////////////////////////////////////////////////////////////
  139. - (CGSize)size {
  140. return self.frame.size;
  141. }
  142. ///////////////////////////////////////////////////////////////////////////////////////////////////
  143. - (void)setSize:(CGSize)size {
  144. CGRect frame = self.frame;
  145. frame.size = size;
  146. self.frame = frame;
  147. }
  148. -(void)removeAllSubviews{
  149. while ([self.subviews count] > 0) {
  150. UIView *subview = [self.subviews objectAtIndex:0];
  151. [subview removeFromSuperview];
  152. }
  153. }
  154. -(void)removeViewWithTag:(NSInteger)tag{
  155. if (tag == 0) {
  156. return;
  157. }
  158. UIView *view = [self viewWithTag:tag];
  159. if (view) {
  160. [view removeFromSuperview];
  161. }
  162. }
  163. -(void)removeSubViewArray:(NSMutableArray *)views{
  164. for (UIView *sub in views) {
  165. [sub removeFromSuperview];
  166. }
  167. }
  168. -(void)removeViewWithTags:(NSArray *)tagArray{
  169. for (NSNumber *num in tagArray) {
  170. [self removeViewWithTag:[num integerValue]];
  171. }
  172. }
  173. -(void)removeViewWithTagLessThan:(NSInteger)tag{
  174. NSMutableArray *views = [NSMutableArray array];
  175. for (UIView *view in self.subviews) {
  176. if (view.tag > 0 && view.tag < tag) {
  177. [views addObject:view];
  178. }
  179. }
  180. [self removeSubViewArray:views];
  181. }
  182. -(void)removeViewWithTagGreaterThan:(NSInteger)tag{
  183. NSMutableArray *views = [NSMutableArray array];
  184. for (UIView *view in self.subviews) {
  185. if (view.tag > 0 && view.tag > tag) {
  186. [views addObject:view];
  187. }
  188. }
  189. [self removeSubViewArray:views];
  190. }
  191. - (UIViewController*)selfViewController {
  192. for (UIView* next = [self superview]; next; next = next.superview) {
  193. UIResponder* nextResponder = [next nextResponder];
  194. if ([nextResponder isKindOfClass:[UIViewController class]]) {
  195. return (UIViewController*)nextResponder;
  196. }
  197. }
  198. return nil;
  199. }
  200. -(UIView *)subviewWithTag:(NSInteger)tag{
  201. for (UIView *sub in self.subviews) {
  202. if (sub.tag == tag) {
  203. return sub;
  204. }
  205. }
  206. return nil;
  207. }
  208. @end