我们在工程中,或多或少的要修改控件的坐标-宽度-高度,于是,经常性的见到大家self.view.frame.origin.x,self.view.frame.size.width.........相当的麻烦,在这里向大家推荐一个比较好的工具类,是UIView的类目,它里面对于求坐标,求高度什么的做了封装,很方便大家调用.
@.h
#
import
<foundation foundation.h=
""
>
#
import
<uikit uikit.h=
""
>
@interface
UIView (TTCategory)
@property
(nonatomic) CGFloat left;
@property
(nonatomic) CGFloat top;
@property
(nonatomic) CGFloat right;
@property
(nonatomic) CGFloat bottom;
@property
(nonatomic) CGFloat width;
@property
(nonatomic) CGFloat height;
@property
(nonatomic) CGFloat centerX;
@property
(nonatomic) CGFloat centerY;
@property
(nonatomic,readonly) CGFloat screenX;
@property
(nonatomic,readonly) CGFloat screenY;
@property
(nonatomic,readonly) CGFloat screenViewX;
@property
(nonatomic,readonly) CGFloat screenViewY;
@property
(nonatomic,readonly) CGRect screenFrame;
@property
(nonatomic) CGPoint origin;
@property
(nonatomic) CGSize size;
@property
(nonatomic) BOOL visible;
/**
* Finds the first descendant view (including this view) that is a member of a particular class.
*/
- (UIView*)descendantOrSelfWithClass:(Class)cls;
/**
* Finds the first ancestor view (including this view) that is a member of a particular class.
*/
- (UIView*)ancestorOrSelfWithClass:(Class)cls;
/**
* Removes all subviews.
*/
- (
void
)removeAllSubviews;
/**
* Calculates the offset of this view from another view in screen coordinates.
*/
- (CGPoint)offsetFromView:(UIView*)otherView;
/**
* The view controller whose view contains this view.
*/
- (UIViewController*)viewController;
- (
void
)addSubviews:(NSArray *)views;
@end
</uikit></foundation>
|
#
import
"UIViewAdditions.h"
@implementation
UIView (TTCategory)
/******************************view是否可见*******************************/
- (BOOL)visible{
return
!self.hidden;
}
- (
void
)setVisible:(BOOL)visible{
self.hidden = !visible;
}
/******************************设置View左边x坐标*******************************/
- (CGFloat)left {
return
self.frame.origin.x;
}
- (
void
)setLeft:(CGFloat)x {
CGRect frame = self.frame;
frame.origin.x = x;
self.frame = frame;
}
/****************************设置View顶部y坐标*********************************/
- (CGFloat)top {
return
self.frame.origin.y;
}
- (
void
)setTop:(CGFloat)y {
CGRect frame = self.frame;
frame.origin.y = y;
self.frame = frame;
}
/****************************设置View右边x坐标*********************************/
- (CGFloat)right {
return
self.frame.origin.x + self.frame.size.width;
}
- (
void
)setRight:(CGFloat)right {
CGRect frame = self.frame;
frame.origin.x = right - frame.size.width;
self.frame = frame;
}
/****************************设置View底部y坐标*************************************/
- (CGFloat)bottom {
return
self.frame.origin.y + self.frame.size.height;
}
- (
void
)setBottom:(CGFloat)bottom {
CGRect frame = self.frame;
frame.origin.y = bottom - frame.size.height;
self.frame = frame;
}
/*****************************设置View的中心坐标********************************/
- (CGFloat)centerX {
return
self.center.x;
}
- (
void
)setCenterX:(CGFloat)centerX {
self.center = CGPointMake(centerX, self.center.y);
}
- (CGFloat)centerY {
return
self.center.y;
}
- (
void
)setCenterY:(CGFloat)centerY {
self.center = CGPointMake(self.center.x, centerY);
}
/**************************设置View的宽度***********************************/
- (CGFloat)width {
return
self.frame.size.width;
}
- (
void
)setWidth:(CGFloat)width {
CGRect frame = self.frame;
frame.size.width = width;
self.frame = frame;
}
/*****************************设置View的高度********************************/
- (CGFloat)height {
return
self.frame.size.height;
}
- (
void
)setHeight:(CGFloat)height {
CGRect frame = self.frame;
frame.size.height = height;
self.frame = frame;
}
- (CGFloat)screenX {
CGFloat x =
0
;
for
(UIView* view = self; view; view = view.superview) {
x += view.left;
}
return
x;
}
- (CGFloat)screenY {
CGFloat y =
0
;
for
(UIView* view = self; view; view = view.superview) {
y += view.top;
}
return
y;
}
- (CGFloat)screenViewX {
CGFloat x =
0
;
for
(UIView* view = self; view; view = view.superview) {
x += view.left;
if
([view isKindOfClass:[UIScrollView
class
]]) {
UIScrollView* scrollView = (UIScrollView*)view;
x -= scrollView.contentOffset.x;
}
}
return
x;
}
- (CGFloat)screenViewY {
CGFloat y =
0
;
for
(UIView* view = self; view; view = view.superview) {
y += view.top;
if
([view isKindOfClass:[UIScrollView
class
]]) {
UIScrollView* scrollView = (UIScrollView*)view;
y -= scrollView.contentOffset.y;
}
}
return
y;
}
- (CGRect)screenFrame {
return
CGRectMake(self.screenViewX, self.screenViewY, self.width, self.height);
}
- (CGPoint)origin {
return
self.frame.origin;
}
- (
void
)setOrigin:(CGPoint)origin {
CGRect frame = self.frame;
frame.origin = origin;
self.frame = frame;
}
- (CGSize)size {
return
self.frame.size;
}
- (
void
)setSize:(CGSize)size {
CGRect frame = self.frame;
frame.size = size;
self.frame = frame;
}
- (CGPoint)offsetFromView:(UIView*)otherView {
CGFloat x =
0
, y =
0
;
for
(UIView* view = self; view && view != otherView; view = view.superview) {
x += view.left;
y += view.top;
}
return
CGPointMake(x, y);
}
/*
- (CGFloat)orientationWidth {
return UIInterfaceOrientationIsLandscape(TTInterfaceOrientation())
? self.height : self.width;
}
- (CGFloat)orientationHeight {
return UIInterfaceOrientationIsLandscape(TTInterfaceOrientation())
? self.width : self.height;
}
*/
- (UIView*)descendantOrSelfWithClass:(Class)cls {
if
([self isKindOfClass:cls])
return
self;
for
(UIView* child in self.subviews) {
UIView* it = [child descendantOrSelfWithClass:cls];
if
(it)
return
it;
}
return
nil;
}
- (UIView*)ancestorOrSelfWithClass:(Class)cls {
if
([self isKindOfClass:cls]) {
return
self;
}
else
if
(self.superview) {
return
[self.superview ancestorOrSelfWithClass:cls];
}
else
{
return
nil;
}
}
- (
void
)removeAllSubviews {
while
(self.subviews.count) {
UIView* child = self.subviews.lastObject;
[child removeFromSuperview];
}
}
- (UIViewController*)viewController {
for
(UIView* next = [self superview]; next; next = next.superview) {
UIResponder* nextResponder = [next nextResponder];
if
([nextResponder isKindOfClass:[UIViewController
class
]]) {
return
(UIViewController*)nextResponder;
}
}
return
nil;
}
- (
void
)addSubviews:(NSArray *)views
{
for
(UIView* v in views) {
[self addSubview:v];
}
}
@end
@interface
NSString (ParseCategory)
- (NSMutableDictionary *)explodeToDictionaryInnerGlue:(NSString *)innerGlue
outterGlue:(NSString *)outterGlue;
@end
@implementation
NSString (ParseCategory)
- (NSMutableDictionary *)explodeToDictionaryInnerGlue:(NSString *)innerGlue
outterGlue:(NSString *)outterGlue
{
NSArray *firstExplode = [self componentsSeparatedByString:outterGlue];
NSArray *secondExplode;
NSInteger count = [firstExplode count];
NSMutableDictionary* returnDictionary = [NSMutableDictionary dictionaryWithCapacity:count];
for
(NSInteger i =
0
; i < count; i++)
{
secondExplode =
[(NSString*)[firstExplode objectAtIndex:i] componentsSeparatedByString:innerGlue];
if
([secondExplode count] ==
2
)
{
[returnDictionary setObject:[secondExplode objectAtIndex:
1
]
forKey:[secondExplode objectAtIndex:
0
]];
}
}
return
returnDictionary;
}
@end
|