前言
本文主要给大家介绍了关于ios如何给view添加指定位置边框线的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
略微封装了一下,给view添加指定位置的边框线,其中位移枚举的使用询问了哥们儿,总算搞定;
示例代码
封装一:直接封装成了一个方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
/// 边框类型(位移枚举)
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内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#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内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
#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
|
用法:
1
2
3
4
|
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]; 之后再设置边框;否则可能会不起作用的;
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。
原文链接:http://blog.csdn.net/syg90178aw/article/details/72465473