ios view添加上边框_iOS开发之如何给View添加指定位置的边框线详解
本文主要给大家介绍了关于iOS如何给View添加指定位置边框线的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
略微封装了一下,给View添加指定位置的边框线,其中位移枚举的使用询问了哥们儿,总算搞定;
示例代码
封装一:直接封装成了一个方法
/// 边框类型(位移枚举)
typedef NS_ENUM(NSInteger, UIBorderSideType) {
UIBorderSideTypeAll = 0,
UIBorderSideTypeTop = 1 << 0,
UIBorderSideTypeBottom = 1 << 1,
UIBorderSideTypeLeft = 1 << 2,
UIBorderSideTypeRight = 1 << 3,
};
/**
设置view指定位置的边框
@param originalView 原view
@param color 边框颜色
@param borderWidth 边框宽度
@param borderType 边框类型 例子: UIBorderSideTypeTop|UIBorderSideTypeBottom
@return view
*/
- (UIView *)borderForView:(UIView *)originalView color:(UIColor *)color borderWidth:(CGFloat)borderWidth borderType:(UIBorderSideType)borderType {
if (borderType == UIBorderSideTypeAll) {
originalView.layer.borderWidth = borderWidth;
originalView.layer.borderColor = color.CGColor;
return originalView;
}
/// 线的路径
UIBezierPath * bezierPath = [UIBezierPath bezierPath];
/// 左侧
if (borderType & UIBorderSideTypeLeft) {
/// 左侧线路径
[bezierPath moveToPoint:CGPointMake(0.0f, originalView.frame.size.height)];
[bezierPath addLineToPoint:CGPointMake(0.0f, 0.0f)];
}
/// 右侧
if (borderType & UIBorderSideTypeRight) {
/// 右侧线路径
[bezierPath moveToPoint:CGPointMake(originalView.frame.size.width, 0.0f)];
[bezierPath addLineToPoint:CGPointMake( originalView.frame.size.width, originalView.frame.size.height)];
}
/// top
if (borderType & UIBorderSideTypeTop) {
/// top线路径
[bezierPath moveToPoint:CGPointMake(0.0f, 0.0f)];
[bezierPath addLineToPoint:CGPointMake(originalView.frame.size.width, 0.0f)];
}
/// bottom
if (borderType & UIBorderSideTypeBottom) {
/// bottom线路径
[bezierPath moveToPoint:CGPointMake(0.0f, originalView.frame.size.height)];
[bezierPath addLineToPoint:CGPointMake( originalView.frame.size.width, originalView.frame.size.height)];
}
CAShapeLayer * shapeLayer = [CAShapeLayer layer];
shapeLayer.strokeColor = color.CGColor;
shapeLayer.fillColor = [UIColor clearColor].CGColor;
/// 添加路径
shapeLayer.path = bezierPath.CGPath;
/// 线宽度
shapeLayer.lineWidth = borderWidth;
[originalView.layer addSublayer:shapeLayer];
return originalView;
}
封装二:封装成了类别
.h内容
#import typedef NS_OPTIONS(NSUInteger, UIBorderSideType) {
UIBorderSideTypeAll = 0,
UIBorderSideTypeTop = 1 << 0,
UIBorderSideTypeBottom = 1 << 1,
UIBorderSideTypeLeft = 1 << 2,
UIBorderSideTypeRight = 1 << 3,
};
@interface UIView (BorderLine)
- (UIView *)borderForColor:(UIColor *)color borderWidth:(CGFloat)borderWidth borderType:(UIBorderSideType)borderType;
@end
.m内容
#import "UIView+BorderLine.h"
@implementation UIView (BorderLine)
- (UIView *)borderForColor:(UIColor *)color borderWidth:(CGFloat)borderWidth borderType:(UIBorderSideType)borderType {
if (borderType == UIBorderSideTypeAll) {
self.layer.borderWidth = borderWidth;
self.layer.borderColor = color.CGColor;
return self;
}
/// 左侧
if (borderType & UIBorderSideTypeLeft) {
/// 左侧线路径
[self.layer addSublayer:[self addLineOriginPoint:CGPointMake(0.f, 0.f) toPoint:CGPointMake(0.0f, self.frame.size.height) color:color borderWidth:borderWidth]];
}
/// 右侧
if (borderType & UIBorderSideTypeRight) {
/// 右侧线路径
[self.layer addSublayer:[self addLineOriginPoint:CGPointMake(self.frame.size.width, 0.0f) toPoint:CGPointMake( self.frame.size.width, self.frame.size.height) color:color borderWidth:borderWidth]];
}
/// top
if (borderType & UIBorderSideTypeTop) {
/// top线路径
[self.layer addSublayer:[self addLineOriginPoint:CGPointMake(0.0f, 0.0f) toPoint:CGPointMake(self.frame.size.width, 0.0f) color:color borderWidth:borderWidth]];
}
/// bottom
if (borderType & UIBorderSideTypeBottom) {
/// bottom线路径
[self.layer addSublayer:[self addLineOriginPoint:CGPointMake(0.0f, self.frame.size.height) toPoint:CGPointMake( self.frame.size.width, self.frame.size.height) color:color borderWidth:borderWidth]];
}
return self;
}
- (CAShapeLayer *)addLineOriginPoint:(CGPoint)p0 toPoint:(CGPoint)p1 color:(UIColor *)color borderWidth:(CGFloat)borderWidth {
/// 线的路径
UIBezierPath * bezierPath = [UIBezierPath bezierPath];
[bezierPath moveToPoint:p0];
[bezierPath addLineToPoint:p1];
CAShapeLayer * shapeLayer = [CAShapeLayer layer];
shapeLayer.strokeColor = color.CGColor;
shapeLayer.fillColor = [UIColor clearColor].CGColor;
/// 添加路径
shapeLayer.path = bezierPath.CGPath;
/// 线宽度
shapeLayer.lineWidth = borderWidth;
return shapeLayer;
}
@end
用法:
UIView *testView = [[UIView alloc] initWithFrame:CGRectMake(80.0f, 80.0f, 200.0f, 100.0f)];
testView.backgroundColor = [UIColor lightGrayColor];
[self.view addSubview:testView];
[self borderForView:testView color:[UIColor redColor] borderWidth:1.0f borderType:UIBorderSideTypeTop | UIBorderSideTypeBottom];
效果:
不足之处,边框线过宽的话,交界处会有留白;
ps:注意:需要先把你的view加载在父view上,[self.view addSubview:testView]; 之后再设置边框;否则可能会不起作用的;
ios view添加上边框_iOS开发之如何给View添加指定位置的边框线详解相关推荐
- ios 绘制线框_iOS开发 给View添加指定位置的边框线
略微封装了一下,给View添加指定位置的边框线,其中位移枚举的使用询问了哥们儿,总算搞定: 封装一:直接封装成了一个方法 /// 边框类型(位移枚举) typedef NS_ENUM(NSIntege ...
- java调用webservice_笃学私教:Java开发网站架构演变过程-从单体应用到微服务架构详解...
原标题:笃学私教:Java开发网站架构演变过程-从单体应用到微服务架构详解 Java开发网站架构演变过程,到目前为止,大致分为5个阶段,分别为单体架构.集群架构.分布式架构.SOA架构和微服务架构.下 ...
- 区块链用哪种语言 Java_区块链开发用什么语言呢?区块链与编程语言的关系详解...
原标题:区块链开发用什么语言呢?区块链与编程语言的关系详解 区块链的概念就随着比特币的大热开始逐渐进入公众视野,比特币的拥有者为了使其创造更高的财富,开始疯狂炒作,因而引发购买比特币大浪潮.然而等到比 ...
- ios view 切上部分圆角_IOS开发入门之给view添加圆角并指定位置
本文将带你了解IOS开发入门之给view添加圆角并指定位置,希望本文对大家学IOS有所帮助. ios中给view添加圆角并指定位置 在ios开发中,为了有个不错的UI交互效果,我们经常会用到为视图添加 ...
- ios 保存图片到相册 崩溃_iOS开发之 保存图片到相册(相机胶卷)
平时开发APP时难免会遇到保存图片到相册的相关操作,具体我么可以直接保存到系统的相机胶卷, 也可以自定义相册保存图片,下面我们就一起来看一看. 保存图片到系统相册 先看看比较简单的直接保存图片到系统相 ...
- 用WEB技术栈开发NATIVE应用(二):WEEX 前端SDK原理详解
摘要: WEEX依旧采取传统的web开发技术栈进行开发,同时app在终端的运行体验不输native app.其同时解决了开发效率.发版速度以及用户体验三个核心问题.那么WEEX是如何实现的?目前WEE ...
- ueditor上传组件显示乱码_最全面的移动端 UI组件设计详解:中篇
上一期给大家讲解了<最全面的移动端UI组件设计详解:上篇>,主要分享了:布局组件和导航组件2个部分:这次给大家带来:基础组件.表单组件和反馈组件详解,希望你在设计APP.小程序.H5页面中 ...
- android开发菜单,Android学习指南之十六:Android菜单详解
Android用户界面的组成除了View外,还包括菜单和对话框,本节我们先来学习一下菜单的使用方法. 菜单Menu是Android用户界面中最常见的元素之一,使用非常频繁.Android菜单主要分为三 ...
- 企业运维实战--自动化运维Saltstack(上)之saltstack的安装部署、远程执行、grains和pillar详解以及Jinja模板的使用
企业运维实战--自动化运维Saltstack(上) 前言 一.Saltstack安装部署 二.sls文件远程执行 saltstack安装httpd并启动 saltstack源码编译安装nginx 启动 ...
最新文章
- 「镁客早报」人类首次在太空3D打印生物器官;中国学者研制出高性能低成本的电解“水制氢”催化剂...
- 阿里云EMR异步构建云HBase二级索引
- MySQL:参数wait_timeout和interactive_timeout以及空闲超时的实现【转】
- log4j配置及正确使用方式
- app后台运行会给服务器发信息吗_零基础搭建电视直播APP平台第一弹(支持安卓+电视盒子)...
- 计算机桌面是是在哪个盘,电脑虚拟内存是设置在哪个盘的
- Linux下使用Vi是方向键变乱码 退格键不能使用的解决方法
- python求完全平方数_【Python】【demo实验6】【练习实例】【完全平方数相关】
- Reddit大热,伯克利PPT带你丝滑入门机器学习:知识点全面覆盖,笔记可搭配食用...
- unity, 删除animationEvent
- Linux网卡名改eth0方法
- 智能硬件产品开发分享
- 贪心算法三个经典例题
- 地平线开源网站源码Deepsoon v1.2.3
- 视频中警戒区 仿射变换
- Unity自动设置keystore密匙库的信息
- 用python爬取xkcd.com上的有趣漫画图片
- 【转】POS终端MAC算法
- A bean with that name has already been defined in class path resource [.] and overriding is disabled
- Git上传文件代码到GitHub
热门文章
- 宝塔nginx运行vue项目刷新404问题解决
- js 全屏 退出全屏
- 宝塔面板 创建 二级域名 Unable to round-trip http request to upstream
- pla3d打印材料密度_模具粉必看!总有一款粉末能解决您的问题-毅速3D打印研制...
- JAVA8后接口的新特性
- mybatis一级,二级缓存。缓存带来的脏读问题
- python集群到hadoop_如何使用Hadoop流在本地Hadoop集群中运行MRJob?
- 【移植Linux 3.4.2内核第三步】从0制作支持新内核的文件系统
- jz2440开发板修改UBOOT支持NAND FLASH
- java实训 :异常(try-catch执行顺序与自定义异常)