前言
对于习惯使用Storyboard的人来说,设置圆角、描边是一件比较蛋疼的事,因为苹果没有在xcode的Interface Builder上直接提供修改控件的圆角,边框设置。
我们来说说如何对某个控件进行圆角、描边处理:
初级
对于一个初学者来说,如果要进行某个控件的圆角、描边设置,就要从Storyboard关联出属性,然后再对属性进行代码处理。
如下代码:
1 2 3 4
| self.myButton.layer.cornerRadius = 20; self.myButton.layer.masksToBounds = YES; self.myButton.layer.borderWidth = 2; self.myButton.layer.borderColor = [UIColor blackColor].CGColor;
|
这样不仅需要Storyboard关联出属性,还要写一堆代码对属性进行设置,不得不说实在麻烦~
中级
更聪明的做法是使用Storyboard提供的Runtime Attributes为控件添加圆角描边。
选中控件,然后在Runtime Attributes框中输入对应的Key
与Type
与Value
,这样程序在运行时就会通过KVC为你的控件属性进行赋值。(不仅仅是圆角、描边~)
如下图
设置圆角、描边的Key为:
1 2 3 4
| layer.borderWidth layer.borderColorFromUIColor layer.cornerRadius clipsToBounds
|
我这次在测试时,
这样做不用关联出属性,但是需要输入大串字符串,也是不够方便。
高级
创建UIView的分类,使用IBInspectable
+ IB_DESIGNABLE
关键字:
1 2 3 4 5 6 7 8 9 10 11
| #import <UIKit/UIKit.h>
IB_DESIGNABLE
@interface UIView (Inspectable)
@property(nonatomic,assign) IBInspectable CGFloat cornerRadius; @property(nonatomic,assign) IBInspectable CGFloat borderWidth; @property(nonatomic,assign) IBInspectable UIColor *borderColor;
@end
|
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
| #import "UIView+Inspectable.h"
@implementation UIView (Inspectable)
-(void)setCornerRadius:(CGFloat)cornerRadius{ self.layer.masksToBounds = YES; self.layer.cornerRadius = cornerRadius; } -(void)setBorderColor:(UIColor *)borderColor{ self.layer.borderColor = borderColor.CGColor; } -(void)setBorderWidth:(CGFloat)borderWidth{ self.layer.borderWidth = borderWidth; }
- (CGFloat)cornerRadius{ return self.layer.cornerRadius; } - (CGFloat)borderWidth{ return self.layer.borderWidth; } - (UIColor *)borderColor{ return [UIColor colorWithCGColor:self.layer.borderColor]; }
@end
|
附上:GitHub地址
直接使用
直接将这两个文件拖入项目中即可使用,在右边栏将会显示圆角和描边的属性设置
如图:
动态显示设置效果
直接使用的话只有在运行时才能看到效果,
例如要实时显示一个UIBUtton
圆角、描边效果,需要创建一个类继承UIButton
1 2 3 4 5 6
| #import <UIKit/UIKit.h> #import "UIView+Inspectable.h"
@interface myButton : UIButton
@end
|
1 2 3 4 5
| #import "myButton.h"
@implementation myButton
@end
|
只要将button的Class选择该空白类即可
关于IBInspectable
与IB_DESIGNABLE
的使用详情可以参考这篇文章《谈不完美的IBDesignable/IBInspectable可视化效果编程》