示例代码

//

#import <UIKit/UIKit.h>

@interface UIView (LPCView)

/** 上 */
@property CGFloat top;
/** 下 */
@property CGFloat bottom;
/** 左 */
@property CGFloat left;
/** 右 */
@property CGFloat right;
/** 中心x */
@property CGFloat centerX;
/** 中心y */
@property CGFloat centerY;
/** 高 */
@property CGFloat height;
/** 宽 */
@property CGFloat width;
/** 角标数 */
@property NSInteger brigeNum;
/** 尺寸 */
@property CGSize size;
/** 坐标 */
@property (nonatomic, assign) CGPoint origin;
/** 偏移x */
@property (nonatomic, assign) CGFloat tx;
/** 偏移y */
@property (nonatomic, assign) CGFloat ty;
/** 是否圆角-高的十分之一 */
@property BOOL isCornerRadiusHeight10;
/** 是否切圆-高的一半 */
@property BOOL isCornerRadiusHalfWidth;
/** 边框颜色 */
@property (nonatomic, strong) UIColor * borderColor;
/** 虚线边框 */
- (void)LPCDashedLine:(UIColor *)lineColor lineWidth:(CGFloat)lineWidth spaceAry:(NSArray<NSNumber *> *)spaceAry;
/** 实线边框 */
- (void)LPCSolidLine:(UIColor *)lineColor lineWidth:(CGFloat)lineWidth;
/** 点击事件-目标-事件 */
- (void)addTarget:(id)target action:(SEL)action;
/** 当前View的视图控制器 */
- (nullable UIViewController *)viewController;

NS_ASSUME_NONNULL_BEGIN
//__nullable表示对象可以是NULL或nil,而__nonnull表示对象不应该为空
/** 避免出现警告 */
NS_ASSUME_NONNULL_END

@end
////////////////////////////m//////////////////////////

//

#import "UIView+LPCView.h"

@implementation UIView (LPCView)

- (CGFloat)top {
    return self.frame.origin.y;
}

- (void)setTop:(CGFloat)top {
    CGRect frame = self.frame;
    frame.origin.y = top;
    self.frame = frame;
}

- (CGFloat)bottom {
    return self.top + self.height;
}

- (void)setBottom:(CGFloat)bottom {
    self.top = bottom - self.height;
}

- (CGFloat)left {
    return self.frame.origin.x;
}

- (void)setLeft:(CGFloat)left {
    CGRect frame = self.frame;
    frame.origin.x = left;
    self.frame = frame;
}

- (CGFloat)right {
    return self.left + self.width;
}

- (void)setRight:(CGFloat)right {
    self.left = right - self.width;
}

- (CGFloat)centerX {
    return self.center.x;
}

- (void)setCenterX:(CGFloat)centerX {
    self.center = CGPointMake(centerX, self.centerY);
}

- (CGFloat)centerY {
    return self.center.y;
}

- (void)setCenterY:(CGFloat)centerY {
    self.center = CGPointMake(self.centerX, centerY);
}

- (CGFloat)height {
    return self.frame.size.height;
}

- (void)setHeight:(CGFloat)height {
    CGRect frame = self.frame;
    frame.size.height = height;
    self.frame = frame;
}

- (CGFloat)width {
    return self.frame.size.width;
}

- (void)setWidth:(CGFloat)width {
    CGRect frame = self.frame;
    frame.size.width = width;
    self.frame = frame;
}
- (CGSize)size {
    return self.frame.size;
}
- (void)setSize:(CGSize)size {
    CGRect frame = self.frame;
    frame.size = size;
    self.frame = frame;
}

- (CGPoint)origin {
    return self.frame.origin;
}

- (void)setOrigin:(CGPoint)origin {
    self.frame = CGRectMake(origin.x, origin.y, self.width, self.height);
}

- (CGFloat)tx {
    return self.transform.tx;
}

- (void)setTx:(CGFloat)tx {
    CGAffineTransform transform = self.transform;
    transform.tx = tx;
    self.transform = transform;
}

- (CGFloat)ty {
    return self.transform.ty;
}

- (void)setTy:(CGFloat)ty {
    CGAffineTransform transform = self.transform;
    transform.ty = ty;
    self.transform = transform;
}

- (nullable UIViewController *)viewController {
    UIResponder *responder = self;
    while ((responder = [responder nextResponder]))
        if ([responder isKindOfClass: [UIViewController class]]) {
            return (UIViewController *)responder;
        }
    return nil;
}

//角标
- (NSInteger)brigeNum {
    if ([[self viewWithTag:48511] isKindOfClass:[UILabel class]]) {
        UILabel * tempLabel = [self viewWithTag:48511];
        return [tempLabel.text integerValue];
    }
    return 0;
}
//角标
- (void)setBrigeNum:(NSInteger)brigeNum {
    NSInteger length = [NSString stringWithFormat:@"%ld", (long)brigeNum].length;
    brigeNum = brigeNum > 99 ? 99 : brigeNum;
    if (0 == length && 0 == brigeNum) {
        return;
    }
    CGRect tempFrame = CGRectMake(self.left + self.width - 6,self.top, 12, 12);
    if ([[self.superview viewWithTag:48511] isKindOfClass:[UILabel class]]) {
        UILabel * tempLabel = [self.superview viewWithTag:48511];
        tempLabel.frame = tempFrame;
        tempLabel.text = [NSString stringWithFormat:@"%ld", (long)brigeNum];
        if (0 == brigeNum) {
            tempLabel.alpha = 0;
        }else {
            tempLabel.alpha = 1;
        }
    }else {
        UILabel * la = [[UILabel alloc] initWithFrame:tempFrame];
        la.text = [NSString stringWithFormat:@"%ld", (long)brigeNum];
        la.font = [UIFont systemFontOfSize:9];
        la.textAlignment = NSTextAlignmentCenter;
        la.textColor = [UIColor whiteColor];
        la.layer.cornerRadius = 6;
        la.layer.masksToBounds = YES;
        
        la.tag = 48511;
        la.backgroundColor = [UIColor redColor];
        
        if (length > 2) {
            la.frame = CGRectMake(tempFrame.size.width - 6, tempFrame.origin.y, 12, 12);
        }
        [self.superview addSubview:la];
        if (0 == brigeNum) {
            la.alpha = 0;
        }else {
            la.alpha = 1;
        }
    }
}

//边框颜色
- (UIColor *)borderColor {
    return [UIColor colorWithCGColor:self.layer.borderColor];
}
- (void)setBorderColor:(UIColor *)borderColor {
    self.layer.borderColor = [borderColor CGColor];
}
//圆角度
- (BOOL)isCornerRadiusHeight10 {
    if (self.height / 10.0 == self.layer.cornerRadius) {
        return YES;
    }
    return NO;
}

- (void)setIsCornerRadiusHeight10:(BOOL)isCornerRadiusHeight10 {
    if (isCornerRadiusHeight10) {
        self.layer.cornerRadius = self.height * kScale_Height / 10.0;
        self.layer.masksToBounds = YES;
    }else {
        isCornerRadiusHeight10 = NO;
    }
}
//切圆
- (BOOL)isCornerRadiusHalfWidth {
    if (self.layer.cornerRadius == self.height / 2.0) {
        return YES;
    }
    return NO;
}

- (void)setIsCornerRadiusHalfWidth:(BOOL)isCornerRadiusHalfWidth {
    if (isCornerRadiusHalfWidth) {
        self.layer.cornerRadius = self.height / 2.0;
        self.layer.masksToBounds = YES;
    }else {
        isCornerRadiusHalfWidth = NO;
    }
}

//虚线边框
- (void)LPCDashedLine:(UIColor *)lineColor lineWidth:(CGFloat)lineWidth spaceAry:(NSArray<NSNumber *> *)spaceAry {
    
    CAShapeLayer *borderLayer = [CAShapeLayer layer];
    
    borderLayer.bounds = CGRectMake(0, 0, self.width , self.height);
    
    borderLayer.position = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds));
    
    //不带圆角
//    borderLayer.path = [UIBezierPath bezierPathWithRect:borderLayer.bounds].CGPath;
    //带圆角
    borderLayer.path = [UIBezierPath bezierPathWithRoundedRect:borderLayer.bounds cornerRadius:self.layer.cornerRadius].CGPath;
    borderLayer.lineWidth = lineWidth / [[UIScreen mainScreen] scale];
    //虚线边框
    borderLayer.lineDashPattern = spaceAry;
    borderLayer.fillColor = [UIColor clearColor].CGColor;
    borderLayer.strokeColor = lineColor.CGColor;
    [self.layer addSublayer:borderLayer];
}
//实线变框
- (void)LPCSolidLine:(UIColor *)lineColor lineWidth:(CGFloat)lineWidth {
    CAShapeLayer *borderLayer = [CAShapeLayer layer];
    
    borderLayer.bounds = CGRectMake(0, 0, self.width , self.height);
    
    borderLayer.position = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds));
    
    //不带圆角
    //    borderLayer.path = [UIBezierPath bezierPathWithRect:borderLayer.bounds].CGPath;
    //带圆角
    borderLayer.path = [UIBezierPath bezierPathWithRoundedRect:borderLayer.bounds cornerRadius:self.layer.cornerRadius].CGPath;
    borderLayer.lineWidth = lineWidth / [[UIScreen mainScreen] scale];
    //实线边框
    borderLayer.lineDashPattern = nil;
    borderLayer.fillColor = [UIColor clearColor].CGColor;
    borderLayer.strokeColor = lineColor.CGColor;
    [self.layer addSublayer:borderLayer];
}

/** 点击事件-目标-事件 */
- (void)addTarget:(id)target action:(SEL)action {
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:target action:action];
    self.userInteractionEnabled = YES;
    [self addGestureRecognizer:tap];
}

@end

iOS 自定义方法 - UIView扩展的更多相关文章

  1. iOS开发-UIView扩展CGRect

    关于UIView的位置都会遇到,一般需要改变UIView的位置,需要先获取原有的frame位置,然后在frame上面修改,有的时候如果只是改变了一下垂直方向的位置,宽度和高度的一种,这种写法很麻烦.下 ...

  2. 开发腾讯移动游戏平台SDK ios版Ane扩展 总结

    本文记录了在开发 腾讯移动游戏平台SDK(MSDK) ios版Ane扩展 过程中所遇到的问题 文中非常多问题都是基础的问题.对object c和xcode配置了解不深入导致的.(没办法,开发ane的程 ...

  3. iOS 通知中心扩展制作初步-b

    涉及的 Session 有 Creating Extensions for iOS and OS X, Part 1 Creating Extensions for iOS and OS X, Par ...

  4. IOS中类的扩展(协议,分类)

    IOS中类的扩展(协议,分类) 扩展类,我们可以使用协议和分类这两种方法,下面我们来分别实现这两种方法: 参考网址:http://www.cnblogs.com/wendingding/p/37095 ...

  5. iOS学习系列 - 扩展机制category与associative

    iOS学习系列 - 扩展机制category与associative category与associative作为objective-c的扩展机制的两个特性,category即类型,可以通过它来扩展方 ...

  6. 荼菜的iOS笔记--UIView的几个Block动画

    前言:我的第一篇文章荼菜的iOS笔记–Core Animation 核心动画算是比较详细讲了核心动画的用法,但是如你上篇看到的,有时我们只是想实现一些很小的动画,这时再用coreAnimation就会 ...

  7. iOS学习——UIView的研究

    在iOS开发中,我们知道有一个共同的基类——NSObject,但是对于界面视图而言,UIView是非常重要的一个类,UIView是很多视图控件的基类,因此,对于UIView的学习闲的非常有必要.在iO ...

  8. ios 关于UIView 的multipleTouchEnabled 和 exclusiveTouch

    做项目时发现,在一个界面上的2个button竟然可以同时点击,依次push进去了2个 controller!我就产生了疑问,一个view的multipleTouchEnabled属性默认是false啊 ...

  9. iOS 使用UIView的一种有效方法

    在一个典型的MVC结构 中,Model部分负责保存目标数据,View部分主要负责实现数据的界面以及将数据显示出来,二者在Controller的操作下协同工作.在iOS应用中,View的实现主要由UIV ...

随机推荐

  1. 在Linux(Ubuntu/openSUSE/CentOS)下配置ASP.NET(Apache + Mono)

    [题外话] 闲的无聊竟然想尝试测试自己做的项目在不同操作系统上的性能表现,所以决定试试在Linux上部署Apache和Mono的环境.由于平时很少接触Linux,所以从网上找了几篇文章(附在相关链接中 ...

  2. ubuntu+mono+jexus 搭建.net的web平台 实现.net跨平台

    准备工作: vmware 用来安装 ubuntu 下载地址:VMware-workstation-9.0.1-894247.exe.tar 注册码: 1A4P8-DMK0N-FZ431-7K8NH-2 ...

  3. 【Java并发编程实战】-----“J.U.C”:CyclicBarrier

    在上篇博客([Java并发编程实战]-----"J.U.C":Semaphore)中,LZ介绍了Semaphore,下面LZ介绍CyclicBarrier.在JDK API中是这么 ...

  4. EasyPR--开发详解(6)SVM开发详解

    在前面的几篇文章中,我们介绍了EasyPR中车牌定位模块的相关内容.本文开始分析车牌定位模块后续步骤的车牌判断模块.车牌判断模块是EasyPR中的基于机器学习模型的一个模块,这个模型就是作者前文中从机 ...

  5. 抛弃jQuery:DOM API之选择元素

    原文链接:http://blog.garstasio.com/you-dont-need-jquery/selectors/ 我的Blog:http://cabbit.me/you-dont-need ...

  6. 延迟求值-如何让Lo-Dash再提速x100?

    「注释」作者在本文里没有说明这么一个事实: 目前的版本Lo-Dash v2.4.1并没有引入延迟求值的特性,Lo-Dash 3.0.0-pre中部分方法进行了引入,比如filter(),map(),r ...

  7. xamarin android ListView手动分组

    xamarin的listview控件其实自带有分组方法,关于xamarin listview的自带分组方法请自行参考官方文档,我这里只写自己写的分组方法.xamarin自带的分组好是好,功能多,但是加 ...

  8. win10更新系统后wifi连接不上了怎么解决?

    遇到了一个小问题,由于更新了一下win10,发现wifi不能用了,以为是wifi密码错了,选择忘记密码试了两次,又试了不同的wifi都不行,发现网卡无线驱动也没事,在网上百度了好久发现说的方法都没用, ...

  9. 游戏服务器菜鸟之C#初探四游戏服务

    经过多次折腾之后,在一次进行了一次重大的重构,去解决问题 主要重构如下 1.将原来的单一协议修改多协议进行,一些查询.认证的功能都采用HTTP进行,避免全部采用TCP链接资源的消耗: 2.原来单一的部 ...

  10. ASP.NET MVC5+EF6+EasyUI 后台管理系统(6)-Unity 依赖注入

    系列目录 前言 为了符合后面更新后的重构系统,文章于2016-11-1日重写 本节重构一下代码,采用IOC控制反转,也就是依赖注入 您可以访问http://unity.codeplex.com/rel ...