本文主要给大家介绍了关于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添加指定位置的边框线详解相关推荐

  1. ios 绘制线框_iOS开发 给View添加指定位置的边框线

    略微封装了一下,给View添加指定位置的边框线,其中位移枚举的使用询问了哥们儿,总算搞定: 封装一:直接封装成了一个方法 /// 边框类型(位移枚举) typedef NS_ENUM(NSIntege ...

  2. java调用webservice_笃学私教:Java开发网站架构演变过程-从单体应用到微服务架构详解...

    原标题:笃学私教:Java开发网站架构演变过程-从单体应用到微服务架构详解 Java开发网站架构演变过程,到目前为止,大致分为5个阶段,分别为单体架构.集群架构.分布式架构.SOA架构和微服务架构.下 ...

  3. 区块链用哪种语言 Java_区块链开发用什么语言呢?区块链与编程语言的关系详解...

    原标题:区块链开发用什么语言呢?区块链与编程语言的关系详解 区块链的概念就随着比特币的大热开始逐渐进入公众视野,比特币的拥有者为了使其创造更高的财富,开始疯狂炒作,因而引发购买比特币大浪潮.然而等到比 ...

  4. ios view 切上部分圆角_IOS开发入门之给view添加圆角并指定位置

    本文将带你了解IOS开发入门之给view添加圆角并指定位置,希望本文对大家学IOS有所帮助. ios中给view添加圆角并指定位置 在ios开发中,为了有个不错的UI交互效果,我们经常会用到为视图添加 ...

  5. ios 保存图片到相册 崩溃_iOS开发之 保存图片到相册(相机胶卷)

    平时开发APP时难免会遇到保存图片到相册的相关操作,具体我么可以直接保存到系统的相机胶卷, 也可以自定义相册保存图片,下面我们就一起来看一看. 保存图片到系统相册 先看看比较简单的直接保存图片到系统相 ...

  6. 用WEB技术栈开发NATIVE应用(二):WEEX 前端SDK原理详解

    摘要: WEEX依旧采取传统的web开发技术栈进行开发,同时app在终端的运行体验不输native app.其同时解决了开发效率.发版速度以及用户体验三个核心问题.那么WEEX是如何实现的?目前WEE ...

  7. ueditor上传组件显示乱码_最全面的移动端 UI组件设计详解:中篇

    上一期给大家讲解了<最全面的移动端UI组件设计详解:上篇>,主要分享了:布局组件和导航组件2个部分:这次给大家带来:基础组件.表单组件和反馈组件详解,希望你在设计APP.小程序.H5页面中 ...

  8. android开发菜单,Android学习指南之十六:Android菜单详解

    Android用户界面的组成除了View外,还包括菜单和对话框,本节我们先来学习一下菜单的使用方法. 菜单Menu是Android用户界面中最常见的元素之一,使用非常频繁.Android菜单主要分为三 ...

  9. 企业运维实战--自动化运维Saltstack(上)之saltstack的安装部署、远程执行、grains和pillar详解以及Jinja模板的使用

    企业运维实战--自动化运维Saltstack(上) 前言 一.Saltstack安装部署 二.sls文件远程执行 saltstack安装httpd并启动 saltstack源码编译安装nginx 启动 ...

最新文章

  1. 「镁客早报」人类首次在太空3D打印生物器官;中国学者研制出高性能低成本的电解“水制氢”催化剂...
  2. 阿里云EMR异步构建云HBase二级索引
  3. MySQL:参数wait_timeout和interactive_timeout以及空闲超时的实现【转】
  4. log4j配置及正确使用方式
  5. app后台运行会给服务器发信息吗_零基础搭建电视直播APP平台第一弹(支持安卓+电视盒子)...
  6. 计算机桌面是是在哪个盘,电脑虚拟内存是设置在哪个盘的
  7. Linux下使用Vi是方向键变乱码 退格键不能使用的解决方法
  8. python求完全平方数_【Python】【demo实验6】【练习实例】【完全平方数相关】
  9. Reddit大热,伯克利PPT带你丝滑入门机器学习:知识点全面覆盖,笔记可搭配食用...
  10. unity, 删除animationEvent
  11. Linux网卡名改eth0方法
  12. 智能硬件产品开发分享
  13. 贪心算法三个经典例题
  14. 地平线开源网站源码Deepsoon v1.2.3
  15. 视频中警戒区 仿射变换
  16. Unity自动设置keystore密匙库的信息
  17. 用python爬取xkcd.com上的有趣漫画图片
  18. 【转】POS终端MAC算法
  19. A bean with that name has already been defined in class path resource [.] and overriding is disabled
  20. Git上传文件代码到GitHub

热门文章

  1. 宝塔nginx运行vue项目刷新404问题解决
  2. js 全屏 退出全屏
  3. 宝塔面板 创建 二级域名 Unable to round-trip http request to upstream
  4. pla3d打印材料密度_模具粉必看!总有一款粉末能解决您的问题-毅速3D打印研制...
  5. JAVA8后接口的新特性
  6. mybatis一级,二级缓存。缓存带来的脏读问题
  7. python集群到hadoop_如何使用Hadoop流在本地Hadoop集群中运行MRJob?
  8. 【移植Linux 3.4.2内核第三步】从0制作支持新内核的文件系统
  9. jz2440开发板修改UBOOT支持NAND FLASH
  10. java实训 :异常(try-catch执行顺序与自定义异常)