论优雅的实现描边
2016-10-18 09:15
183 查看
最近使用了一下 IBAnimatable,这个库对
后期如果 UI 需要重新调整,会变得比较痛苦。
一般描边都只需要1个像素的描边,在使用
有些
代码中到处出现,进行描边的代码,一定程度影响代码的美观和阅读性(PS: 我有洁癖)。
对这些实现进行封装的确是一个不错的选择。但我也许还有可能有更好的方案。
喵神的 WWDC 2014 Session笔记 - 可视化开发,IB 的新时代
Nate Cook 的 IBInspectable / IBDesignable(译文)
思路如下:
可以使用
我们可以统一在
我不希望为了实现描边还去继承一个类,所以我选择对
我需要增加一下新的属性来定义描边,所以我需要使用
由于我希望通过
这样做还是有缺点的,IB 上的属性有点多。。。
对于代码感兴趣的同学可以到https://github.com/bay2/IBViewExt,我在这里就不贴代码了,代码不多看
文章转自 sim_cai的简书
IBInspectable的使用真让人叹为观止。突然意识到其实
IBInspectable可以让我们减少很多不必要的重复代码。对一个
UIView进行描边是我们在开发过程中比较常用的,UI 设计师们希望通过描边来增加界面的层次感。
常见的描边实现
通过 UIView 实现描一条线
在刚开始做 iOS 开发时,我很喜欢使用这样的方式。但后来发现这种实现用一下两个缺点:后期如果 UI 需要重新调整,会变得比较痛苦。
一般描边都只需要1个像素的描边,在使用
Xib或
StoryBoard的时候需要设置 0.5 这样的值。
Xib和
StoryBoard好像支持的不太好,经常会出现在 plus 上描边的线看起来特别粗。
通过 CALayer 绘制描边
这个方法实现描边的效果很不错。但还是有些缺点:有些
UIView其实在代码中不需要体现,但因为需要描边。我必须把它拖到代码中。
代码中到处出现,进行描边的代码,一定程度影响代码的美观和阅读性(PS: 我有洁癖)。
对这些实现进行封装的确是一个不错的选择。但我也许还有可能有更好的方案。
使用 IBInspectable
这里我只描述我的实现思路,不对IBInspectable进行介绍。毕竟
IBInspectable是 2014WWDC 的内容了(PS: 比我学习 iOS 还要早 = =),很多大神都有博客对其介绍。
喵神的 WWDC 2014 Session笔记 - 可视化开发,IB 的新时代
Nate Cook 的 IBInspectable / IBDesignable(译文)
思路如下:
可以使用
IBDesignable将属性定义到 IB 中,通过定义属性,实现描边。
我们可以统一在
layoutSubviews中进行描边处理。
我不希望为了实现描边还去继承一个类,所以我选择对
UIView通过
Category实现描边的功能。
我需要增加一下新的属性来定义描边,所以我需要使用
AssociatedObject实现。对于
AssociatedObject不了解的同学可以看南峰子的这篇博客 Objective-C Runtime 运行时之二:成员变量与属性。
由于我希望通过
Category实现描边,我还需要使用
Method Swizzling实现。在每个
UIView及其子类 在实现
layoutSubviews去执行我的描边代码。不了解的同学可以看南峰子的这篇博客 Objective-C Runtime 运行时之四:Method Swizzling。
最终实现效果
如图,只需要在 IB 上配置上属性,就可以实现描边的功能。这样做还是有缺点的,IB 上的属性有点多。。。
对于代码感兴趣的同学可以到https://github.com/bay2/IBViewExt,我在这里就不贴代码了,代码不多看
UIView+IB.m文件就可以了。
IBInspectable 的局限
BDesignable和
IBInspectable无法在 Cocoa Touch Frameworks 中生效,详细看这里,所以使用
Carthage的时候,
BDesignable和
IBInspectable也无法正常工作,
cocoapods不会有次问题。
BDesignable无法再 categories/extensions 正常工作, stackoverflow 上也有提到这个问题
文章转自 sim_cai的简书
相关文章推荐
- C# 3.0下有限状态机的一种优雅的实现
- Windows界面——使用Custom Draw优雅的实现ListCtrl的重绘
- VC三两句话实现字体描边和空心效果
- 实现IDisposable以实现更优雅的代码
- CEGUI字体阴影描边实现及载入优化
- 纯css实现带三角箭头带描边带阴影带圆角的兼容各浏览器de气泡层
- 实现compare接口的优雅方式
- javascript package的一种简单"优雅"实现
- (转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果
- 更优雅的类CMyString的实现
- 使用Custom Draw优雅的实现ListCtrl的重绘
- 自定义Button 实现Flex Button 描边效果。
- 使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果
- aspjpeg 半透明描边的实现函数
- 实现无附加页面,无附加WebService优雅的图片验证码控件
- 用css滤镜实现的文字描边效果的代码
- css滤镜实现文字描边效果----不支持FF与IE6
- 让INotifyPropertyChanged的实现更优雅一些 (转)
- do...while(0)优雅的实现
- CEGUI 0.7x实现下划线描边图文混排等效果