iOS 自定义方法 - UIView扩展
//
#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扩展的更多相关文章
- iOS开发-UIView扩展CGRect
关于UIView的位置都会遇到,一般需要改变UIView的位置,需要先获取原有的frame位置,然后在frame上面修改,有的时候如果只是改变了一下垂直方向的位置,宽度和高度的一种,这种写法很麻烦.下 ...
- 开发腾讯移动游戏平台SDK ios版Ane扩展 总结
本文记录了在开发 腾讯移动游戏平台SDK(MSDK) ios版Ane扩展 过程中所遇到的问题 文中非常多问题都是基础的问题.对object c和xcode配置了解不深入导致的.(没办法,开发ane的程 ...
- iOS 通知中心扩展制作初步-b
涉及的 Session 有 Creating Extensions for iOS and OS X, Part 1 Creating Extensions for iOS and OS X, Par ...
- IOS中类的扩展(协议,分类)
IOS中类的扩展(协议,分类) 扩展类,我们可以使用协议和分类这两种方法,下面我们来分别实现这两种方法: 参考网址:http://www.cnblogs.com/wendingding/p/37095 ...
- iOS学习系列 - 扩展机制category与associative
iOS学习系列 - 扩展机制category与associative category与associative作为objective-c的扩展机制的两个特性,category即类型,可以通过它来扩展方 ...
- 荼菜的iOS笔记--UIView的几个Block动画
前言:我的第一篇文章荼菜的iOS笔记–Core Animation 核心动画算是比较详细讲了核心动画的用法,但是如你上篇看到的,有时我们只是想实现一些很小的动画,这时再用coreAnimation就会 ...
- iOS学习——UIView的研究
在iOS开发中,我们知道有一个共同的基类——NSObject,但是对于界面视图而言,UIView是非常重要的一个类,UIView是很多视图控件的基类,因此,对于UIView的学习闲的非常有必要.在iO ...
- ios 关于UIView 的multipleTouchEnabled 和 exclusiveTouch
做项目时发现,在一个界面上的2个button竟然可以同时点击,依次push进去了2个 controller!我就产生了疑问,一个view的multipleTouchEnabled属性默认是false啊 ...
- iOS 使用UIView的一种有效方法
在一个典型的MVC结构 中,Model部分负责保存目标数据,View部分主要负责实现数据的界面以及将数据显示出来,二者在Controller的操作下协同工作.在iOS应用中,View的实现主要由UIV ...
随机推荐
- ENode 2.8 最新架构图简介
ENode架构图 什么是ENode ENode是一个.NET平台下,纯C#开发的,基于DDD,CQRS,ES,EDA,In-Memory架构风格的,可以帮助开发者开发高并发.高吞吐.可伸缩.可扩展的应 ...
- Lesson 23 A new house
Text I had a letter from my sister yesterday. She lives in Nigeria. In her letter, she said that she ...
- .NET基础拾遗(3)字符串、集合和流
Index: (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开发基础 ...
- 使用mapreduce计算环比的实例
最近做了一个小的mapreduce程序,主要目的是计算环比值最高的前5名,本来打算使用spark计算,可是本人目前spark还只是简单看了下,因此就先改用mapreduce计算了,今天和大家分享下这个 ...
- 浏览器怎么添加 Axure扩展程序
步骤 本文以强大如斯的谷歌浏览器来说明,怎么查看Axure原型文件,怎么添加Axure RP扩展程序.Axure RP生成的原型文件,一般都是可以用浏览器打开的, 如:一般都有index.star ...
- Jquary入门(添加 修改 表单元素)+ JSON+弹框
字符串拼接 计算机语言 都是 对 数据的处理(获取/修改数据) 添加元素 除了 固定的方法添加 以外 都是 字符串拼接(拼接成固定格式即可执行). 1.表单添加元素 append() 方 ...
- .Net使用Newtonsoft.Json.dll(JSON.NET)对象序列化成json、反序列化json示例教程
JSON作为一种轻量级的数据交换格式,简单灵活,被很多系统用来数据交互,作为一名.NET开发人员,JSON.NET无疑是最好的序列化框架,支持XML和JSON序列化,高性能,免费开源,支持LINQ查询 ...
- ubuntu14.04安装及web环境的搭建
在进行接下来的工作之前首先得准备一个Ubuntu的启动U盘以及腾出一个至少50G的系统盘(在网上看到有人用20G的,不知道效果怎么样).关于Ubuntu启动U盘大家可以参考这个帖子 http://ti ...
- 坎坷路:ASP.NET Core 1.0 Identity 身份验证(中集)
上一篇:<坎坷路:ASP.NET 5 Identity 身份验证(上集)> ASP.NET Core 1.0 什么鬼?它是 ASP.NET vNext,也是 ASP.NET 5,以后也可能 ...
- 分布式系统理论进阶 - Raft、Zab
引言 <分布式系统理论进阶 - Paxos>介绍了一致性协议Paxos,今天我们来学习另外两个常见的一致性协议——Raft和Zab.通过与Paxos对比,了解Raft和Zab的核心思想.加 ...