UIView+ITTAdditions.m 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. //
  2. // UIView+ITTAdditions.m
  3. // Sword
  4. //
  5. // Created by Sword on 3/15/12.
  6. // Copyright (c) 2012 iTotemStudio. All rights reserved.
  7. //
  8. #import "UIView+ITTAdditions.h"
  9. UIInterfaceOrientation ITTInterfaceOrientation() {
  10. UIInterfaceOrientation orient = [UIApplication sharedApplication].statusBarOrientation;
  11. return orient;
  12. }
  13. CGRect ITTScreenBounds() {
  14. CGRect bounds = [UIScreen mainScreen].bounds;
  15. if (UIInterfaceOrientationIsLandscape(ITTInterfaceOrientation())) {
  16. CGFloat width = bounds.size.width;
  17. bounds.size.width = bounds.size.height;
  18. bounds.size.height = width;
  19. }
  20. return bounds;
  21. }
  22. @implementation UIView (ITTAdditions)
  23. ///////////////////////////////////////////////////////////////////////////////////////////////////
  24. - (CGFloat)left {
  25. return self.frame.origin.x;
  26. }
  27. ///////////////////////////////////////////////////////////////////////////////////////////////////
  28. - (void)setLeft:(CGFloat)x {
  29. CGRect frame = self.frame;
  30. frame.origin.x = x;
  31. self.frame = frame;
  32. }
  33. ///////////////////////////////////////////////////////////////////////////////////////////////////
  34. - (CGFloat)top {
  35. return self.frame.origin.y;
  36. }
  37. ///////////////////////////////////////////////////////////////////////////////////////////////////
  38. - (void)setTop:(CGFloat)y {
  39. CGRect frame = self.frame;
  40. frame.origin.y = y;
  41. self.frame = frame;
  42. }
  43. ///////////////////////////////////////////////////////////////////////////////////////////////////
  44. - (CGFloat)right {
  45. return self.frame.origin.x + self.frame.size.width;
  46. }
  47. ///////////////////////////////////////////////////////////////////////////////////////////////////
  48. - (void)setRight:(CGFloat)right {
  49. CGRect frame = self.frame;
  50. frame.origin.x = right - frame.size.width;
  51. self.frame = frame;
  52. }
  53. ///////////////////////////////////////////////////////////////////////////////////////////////////
  54. - (CGFloat)bottom {
  55. return self.frame.origin.y + self.frame.size.height;
  56. }
  57. ///////////////////////////////////////////////////////////////////////////////////////////////////
  58. - (void)setBottom:(CGFloat)bottom {
  59. CGRect frame = self.frame;
  60. frame.origin.y = bottom - frame.size.height;
  61. self.frame = frame;
  62. }
  63. ///////////////////////////////////////////////////////////////////////////////////////////////////
  64. - (CGFloat)centerX {
  65. return self.center.x;
  66. }
  67. ///////////////////////////////////////////////////////////////////////////////////////////////////
  68. - (void)setCenterX:(CGFloat)centerX {
  69. self.center = CGPointMake(centerX, self.center.y);
  70. }
  71. ///////////////////////////////////////////////////////////////////////////////////////////////////
  72. - (CGFloat)centerY {
  73. return self.center.y;
  74. }
  75. ///////////////////////////////////////////////////////////////////////////////////////////////////
  76. - (void)setCenterY:(CGFloat)centerY {
  77. self.center = CGPointMake(self.center.x, centerY);
  78. }
  79. ///////////////////////////////////////////////////////////////////////////////////////////////////
  80. - (CGFloat)width {
  81. return self.frame.size.width;
  82. }
  83. ///////////////////////////////////////////////////////////////////////////////////////////////////
  84. - (void)setWidth:(CGFloat)width {
  85. CGRect frame = self.frame;
  86. frame.size.width = width;
  87. self.frame = frame;
  88. }
  89. ///////////////////////////////////////////////////////////////////////////////////////////////////
  90. - (CGFloat)height {
  91. return self.frame.size.height;
  92. }
  93. ///////////////////////////////////////////////////////////////////////////////////////////////////
  94. - (void)setHeight:(CGFloat)height {
  95. CGRect frame = self.frame;
  96. frame.size.height = height;
  97. self.frame = frame;
  98. }
  99. ///////////////////////////////////////////////////////////////////////////////////////////////////
  100. - (CGFloat)ttScreenX {
  101. CGFloat x = 0;
  102. for (UIView* view = self; view; view = view.superview) {
  103. x += view.left;
  104. }
  105. return x;
  106. }
  107. ///////////////////////////////////////////////////////////////////////////////////////////////////
  108. - (CGFloat)ttScreenY {
  109. CGFloat y = 0;
  110. for (UIView* view = self; view; view = view.superview) {
  111. y += view.top;
  112. }
  113. return y;
  114. }
  115. ///////////////////////////////////////////////////////////////////////////////////////////////////
  116. - (CGFloat)screenViewX {
  117. CGFloat x = 0;
  118. for (UIView* view = self; view; view = view.superview) {
  119. x += view.left;
  120. if ([view isKindOfClass:[UIScrollView class]]) {
  121. UIScrollView* scrollView = (UIScrollView*)view;
  122. x -= scrollView.contentOffset.x;
  123. }
  124. }
  125. return x;
  126. }
  127. ///////////////////////////////////////////////////////////////////////////////////////////////////
  128. - (CGFloat)screenViewY {
  129. CGFloat y = 0;
  130. for (UIView* view = self; view; view = view.superview) {
  131. y += view.top;
  132. if ([view isKindOfClass:[UIScrollView class]]) {
  133. UIScrollView* scrollView = (UIScrollView*)view;
  134. y -= scrollView.contentOffset.y;
  135. }
  136. }
  137. return y;
  138. }
  139. ///////////////////////////////////////////////////////////////////////////////////////////////////
  140. - (CGRect)screenFrame {
  141. return CGRectMake(self.screenViewX, self.screenViewY, self.width, self.height);
  142. }
  143. ///////////////////////////////////////////////////////////////////////////////////////////////////
  144. - (CGPoint)origin {
  145. return self.frame.origin;
  146. }
  147. ///////////////////////////////////////////////////////////////////////////////////////////////////
  148. - (void)setOrigin:(CGPoint)origin {
  149. CGRect frame = self.frame;
  150. frame.origin = origin;
  151. self.frame = frame;
  152. }
  153. ///////////////////////////////////////////////////////////////////////////////////////////////////
  154. - (CGSize)size {
  155. return self.frame.size;
  156. }
  157. ///////////////////////////////////////////////////////////////////////////////////////////////////
  158. - (void)setSize:(CGSize)size {
  159. CGRect frame = self.frame;
  160. frame.size = size;
  161. self.frame = frame;
  162. }
  163. ///////////////////////////////////////////////////////////////////////////////////////////////////
  164. - (CGFloat)orientationWidth {
  165. return UIInterfaceOrientationIsLandscape(ITTInterfaceOrientation())
  166. ? self.height : self.width;
  167. }
  168. ///////////////////////////////////////////////////////////////////////////////////////////////////
  169. - (CGFloat)orientationHeight {
  170. return UIInterfaceOrientationIsLandscape(ITTInterfaceOrientation())
  171. ? self.width : self.height;
  172. }
  173. ///////////////////////////////////////////////////////////////////////////////////////////////////
  174. - (UIView*)descendantOrSelfWithClass:(Class)cls {
  175. if ([self isKindOfClass:cls])
  176. return self;
  177. for (UIView* child in self.subviews) {
  178. UIView* it = [child descendantOrSelfWithClass:cls];
  179. if (it)
  180. return it;
  181. }
  182. return nil;
  183. }
  184. ///////////////////////////////////////////////////////////////////////////////////////////////////
  185. - (UIView*)ancestorOrSelfWithClass:(Class)cls {
  186. if ([self isKindOfClass:cls]) {
  187. return self;
  188. } else if (self.superview) {
  189. return [self.superview ancestorOrSelfWithClass:cls];
  190. } else {
  191. return nil;
  192. }
  193. }
  194. ///////////////////////////////////////////////////////////////////////////////////////////////////
  195. - (void)removeAllSubviews {
  196. while (self.subviews.count) {
  197. UIView* child = self.subviews.lastObject;
  198. [child removeFromSuperview];
  199. }
  200. }
  201. ///////////////////////////////////////////////////////////////////////////////////////////////////
  202. - (CGPoint)offsetFromView:(UIView*)otherView {
  203. CGFloat x = 0, y = 0;
  204. for (UIView* view = self; view && view != otherView; view = view.superview) {
  205. x += view.left;
  206. y += view.top;
  207. }
  208. return CGPointMake(x, y);
  209. }
  210. - (void)setBorderColor:(UIColor *)borderColor width:(CGFloat)borderWidth
  211. {
  212. self.layer.borderColor = borderColor.CGColor;
  213. self.layer.borderWidth = borderWidth;
  214. }
  215. @end