UIView自动调整控件(一个很方便使用的工具类吧)

来源:互联网 发布:linux分辨率只有两个 编辑:程序博客网 时间:2024/06/05 14:22

镔哥自己仿照其他类重写的工具类,我们在工程中,或多或少的要修改控件的坐标-宽度-高度,于是,经常性的见到大家self.view.frame.origin.x,  self.view.frame.size.width.........相当的麻烦, 在这里向大家写一下的工具类,是UIView的类目,它里面对于求坐标,求高度什么的做了封装,很方便大家调用.

#import <Foundation/Foundation.h>

#import <UIKit/UIKit.h>


@interface UIView (bgCategory)


@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;


+ (UILabel *)labelWithFrame:(CGRect)frame fontSize:(CGFloat)fontSize textAlignment:(NSTextAlignment)alignment text:(NSString *)text;

@end


.m文件

#import "UIViewbggong.h"

@implementation UIView (TTCategory)

/******************************view是否可见*******************************/

- (BOOL)visible{

return !self.hidden;

}


- (void)setVisible:(BOOL)visible{

self.hidden = !visible;

}


/******************************设置View左边x坐标*******************************/

- (CGFloat)left {

  returnself.frame.origin.x;

}


- (void)setLeft:(CGFloat)x {

  CGRect frame = self.frame;

  frame.origin.x = x;

  self.frame = frame;

}


/****************************设置View顶部y坐标*********************************/

- (CGFloat)top {

  returnself.frame.origin.y;

}


- (void)setTop:(CGFloat)y {

  CGRect frame = self.frame;

  frame.origin.y = y;

  self.frame = frame;

}


/****************************设置View右边x坐标*********************************/

- (CGFloat)right {

  returnself.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 {

  returnself.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 {

  returnself.frame.size.width;

}


- (void)setWidth:(CGFloat)width {

  CGRect frame = self.frame;

  frame.size.width = width;

  self.frame = frame;

}


/*****************************设置View的高度********************************/

- (CGFloat)height {

  returnself.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:[UIScrollViewclass]]) {

      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:[UIScrollViewclass]]) {

      UIScrollView* scrollView = (UIScrollView*)view;

      y -= scrollView.contentOffset.y;

    }

  }

  return y;

}


- (CGRect)screenFrame {

  returnCGRectMake(self.screenViewX,self.screenViewY,self.width,self.height);

}


- (CGPoint)origin {

  returnself.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;

  }

  returnCGPointMake(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 ([selfisKindOfClass:cls])

    return self;

  

  for (UIView* childinself.subviews) {

    UIView* it = [childdescendantOrSelfWithClass:cls];

    if (it)

      return it;

  }

  

  return nil;

}


- (UIView*)ancestorOrSelfWithClass:(Class)cls {

  if ([selfisKindOfClass:cls]) {

    return self;

  } else if (self.superview) {

    return [self.superviewancestorOrSelfWithClass:cls];

  } else {

    return nil;

  }

}


- (void)removeAllSubviews {

  while (self.subviews.count) {

    UIView* child =self.subviews.lastObject;

    [child removeFromSuperview];

  }

}




- (UIViewController*)viewController {

  for (UIView* next = [selfsuperview]; next; next = next.superview) {

    UIResponder* nextResponder = [next nextResponder];

    if ([nextResponder isKindOfClass:[UIViewController class]]) {

      return (UIViewController*)nextResponder;

    }

  }

  return nil;

}



- (void)addSubviews:(NSArray *)views

{

for (UIView* vin views) {

[selfaddSubview:v];

}

}


+ (UILabel *)labelWithFrame:(CGRect)frame

                   fontSize:(CGFloat)fontSize

              textAlignment:(NSTextAlignment)alignment

                       text:(NSString *)text

{

    UILabel *label = [[UILabelalloc]initWithFrame:frame];

    label.backgroundColor = [UIColorclearColor];

    label.font = [UIFontsystemFontOfSize:fontSize];

    label.textAlignment = alignment;

    label.text = text;

    label.textColor = [UIColorblackColor];

    label.lineBreakMode =NSLineBreakByWordWrapping;

    return [label autorelease];

}



@end


@interface NSString (ParseCategory)

- (NSMutableDictionary *)explodeToDictionaryInnerGlue:(NSString *)innerGlue 

outterGlue:(NSString *)outterGlue;

@end


@implementation NSString (ParseCategory)


- (NSMutableDictionary *)explodeToDictionaryInnerGlue:(NSString *)innerGlue 

                                           outterGlue:(NSString *)outterGlue 

{

  NSArray *firstExplode = [selfcomponentsSeparatedByString:outterGlue];

  NSArray *secondExplode;

  

  NSInteger count = [firstExplode count];

  NSMutableDictionary* returnDictionary = [NSMutableDictionarydictionaryWithCapacity:count];

  

  for (NSInteger i =0; i < count; i++)

  {

    secondExplode = 

    [(NSString*)[firstExplodeobjectAtIndex:i]componentsSeparatedByString:innerGlue];

    if ([secondExplode count] == 2

    {

      [returnDictionary setObject:[secondExplodeobjectAtIndex:1

                           forKey:[secondExplodeobjectAtIndex:0]];

    }

  }

  return returnDictionary;

}



@end




0 0