zoukankan      html  css  js  c++  java
  • UIViewAdditions(一个非常方便的工具类用它)

              我们在project在,改变或多或少控件的坐标-宽度-高度,然后,经常看到你的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
    
               @.m

    #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
    

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    el-select下拉框选项太多导致卡顿,使用下拉框分页来解决
    vue+elementui前端添加数字千位分割
    Failed to check/redeclare auto-delete queue(s)
    周末啦,做几道面试题放松放松吧!
    idea快捷键
    解决flink运行过程中报错Could not allocate enough slots within timeout of 300000 ms to run the job. Please make sure that the cluster has enough resources.
    用.net平台实现websocket server
    MQTT实战3
    Oracle 查看当前用户下库里所有的表、存储过程、触发器、视图
    idea从svn拉取项目不识别svn
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4666664.html
Copyright © 2011-2022 走看看