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 <UIKit/UIKit.h> 

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]; 之后再设置边框;否则可能会不起作用的;

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • iOS应用开发中UIView添加边框颜色及设置圆角边框的方法

    UIView加边框及边框颜色 引用库: 复制代码 代码如下: #import <QuartzCore/QuartzCore.h> 使用: 复制代码 代码如下: //添加边框和提示         CGRect frameRect = CGRectMake(20, 90, self.window.frame.size.width-40, self.window.frame.size.height-180);         UIView   *frameView = [[UIView alloc

  • IOS设置UIView的边框为圆角详解及实例

    IOS设置UIView的边框为圆角 iOS 系统自带的 View 组件都是正方形的,看起来都太生硬,有时候我需要变成圆角形式,如下图: 具体的实现是使用QuartzCore库,下面我具体的描述一下实现过程: •    首先创建一个项目,名字叫:ipad_webwiew     •    利用Interface Builder添加一个UIWebView,然后和相应的代码相关联     •    添加QuartzCore.framework 代码实现: 头文件: #import <UIKit/UIK

  • iOS开发之如何给View添加指定位置的边框线详解

    前言 本文主要给大家介绍了关于iOS如何给View添加指定位置边框线的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 略微封装了一下,给View添加指定位置的边框线,其中位移枚举的使用询问了哥们儿,总算搞定: 示例代码 封装一:直接封装成了一个方法 /// 边框类型(位移枚举) typedef NS_ENUM(NSInteger, UIBorderSideType) { UIBorderSideTypeAll = 0, UIBorderSideTypeTop = 1

  • IOS开发之判断两个数组中数据是否相同实例详解

    IOS开发之判断两个数组中数据是否相同实例详解 前言: 工作中遇到的问题,这里记录下,也许能帮助到大家 实例代码: NSArray *array1 = [NSArray arrayWithObjects:@"a", @"b", @"c", nil nil]; NSArray *array2 = [NSArray arrayWithObjects:@"b", @"a", @"c", nil

  • iOS UIAlertController中UITextField添加晃动效果与边框颜色详解

    前言 大家都知道在iOS8中引入了UIAlertController,通过UIAlertController可以方便的添加文本框进行编辑,但是,在输入错误的内容时,如何对用户进行提醒就成了问题,因为UIAlertController中的所有UIAlertAction都会导致UIAlertController的消失.这里,我就描述两种提示的方法,分别是晃动文本框和修改边框的颜色.下面话不多说了,来一起看看详细的实现方法吧. 晃动UITextField 晃动UITextField其实就是对它添加一个

  • IOS 开发之自定义按钮实现文字图片位置随意定制

    IOS 开发之自定义按钮实现文字图片位置随意定制 可能有些看到这篇文章的朋友会觉得很不屑:"按钮谁不会自定义?还需要看你的?" 也确实,按钮是我们项目中最常见的控件之一,天天在使用.对于不同类型的按钮,我们是否有更加简便的方法来实现需求是我们需要做的.这里我提出自己的两种方法,您可以对你自己平时自定义按钮的方法做一下对比,看看哪种方法更加简单. 多说一句,千万不要觉得知识简单,觉得自己会了,没必要学习.'往往简单的东西存在大智慧'(这个比给满分),知识都是慢慢积累出来的. 按钮是应用中

  • vue项目添加多页面配置的步骤详解

    公司使用 vue-cli 创建的 vue项目 在初始化时并没有做多页面配置,随着需求的不断增加,发现有必要使用多页面配置.看了很多 vue多页面配置 的文章,基本都是在初始化时就配置了多页面.而且如果使用这些实现,需要调整当前项目的目录结构,这点也是不能接受的. 最后,参考这些文章,在不调整当前项目目录结构实现了多页面的配置的添加.这里做下记录.总结,方便以后复用.如果还能有幸帮助到有同样需求的童鞋的话,那就更好了. 实现步骤 1.添加新增入口相关文件; 2.使用变量维护多入口: 3.开发环境读

  • Android ListView里控件添加监听方法的实例详解

    Android ListView里控件添加监听方法的实例详解 关于ListView,算是android中比较常见的控件,在ListView我们通常需要一个模板,这个模板指的不是住模块,而是配置显示在ListView里面的东西,今天做项目的时候发现想要添加一个ImageView监听方法,发现崩了,也许是好久没有动ListView竟然忘了不能直接在主UI的xml文件里面调用其他xml文件的控件,哪怕ListView用的是这个xml文件. [错误示范]: 直接调用ImageView这个控件是ListV

  • android 限制某个操作每天只能操作指定的次数(示例代码详解)

    最近有个需求,要求启动页的拦截页每天只能显示3次,超过三次就显示别的页面,然后到第二天才可以再次显示,利用SharePreferences保存天数和每天的次数,大概是思路是:判断 如果是同一天,就去拿保存的次数,当次数小于3才执弹出拦截页,然后,每次弹出,次数就加1,并且保存次数和当天的时间:如果不是同一天,就把次数赋值为1,并且把当天赋值给最后访问的时间,然后保存当前的次数.具体实现如下: package com.example.demo1.test; import android.suppo

  • Android实现动态添加数据与堆叠折线图详解流程

    目录 效果视频 引用 描述 导包 代码分析 初始化 动态添加数据 温度数据 湿度数据 光照数据 动态添加X轴时间值 初始化 自动刷新时间实现 尾言 效果视频 引用 描述 本示例采用的是非常.非常.非常好用的一款第三方SDK--helloCharts 传送门 导包 第一步 :导入maven maven { url 'https://jitpack.io' } 第二步:导入依赖 implementation 'com.github.lecho:hellocharts-library:1.5.8@aa

  • iOS小技能之字典转模及对象相等性示例详解

    目录 前言 I 字典转模型 1.1 字典转模型的实现步骤 1.2 字典转模型的过程 II 对象的相等性 & 本体性 2.1 相等性检查 2.2 Foundation 框架中,自己实现的相等性检查 2.3 字符串驻留 III 代码重构(前提是已经实现了基本功能) see also 前言 字典转模型 /** 通常实现字典实例化模型,都实现了以下模型的实例化方法*/ //使用字典实例化模型 - (instancetype) initWithDictionary :(NSDictionary *) ap

  • 使用AngularJS编写多选按钮选中时触发指定方法的指令代码详解

    最近在做项目时,遇到了需要用到多选按钮选中触发事件的功能,因此我查找了一下AngularJS的提供的指令,但是没有发现相应的指令.而一个看起来很像的指令就是ng-checked,但是这个指令是用来代替标签里面checked属性的,所以也用不了.因此我就自己动手试着写一个这样的指令,相应的代码如下: <form name="test_form" ng-controller="TestCtrl"> <input type="checkbox&

随机推荐