runtime的实际应用以及API设计

今天照例撸代码,看到如下设计图.在设计图的上看到有许多的地方都有一个红色提醒标识.于是就想着做一个类似Badge的控件.开始想自定义一个这样的控件,但是发现如果要实现一个类,这样其他已有的视图可复用性太低,最后打算给uiview写一个cagetory.

runtime的实际应用以及API设计_第1张图片

设计API接口的时候就想着如果一个方法里面的参数过多,就会过度设计.但是如果参数太少,可复用性就差.最后决定用 objc_setAssociatedObject 和 objc_setAssociatedObject 来动态的为uiview加上badge这样的属性.

我们都知道,catagory之所以不能给一个类添加属性是因为编译器在最开始就已经分配好了内存,所以无法在添加任何实例变量,但是有了runtime,让一切皆有可能.

具体实现的代码如下:

runtime的实际应用以及API设计_第2张图片



runtime的实际应用以及API设计_第3张图片
runtime的实际应用以及API设计_第4张图片
runtime的实际应用以及API设计_第5张图片
runtime的实际应用以及API设计_第6张图片
runtime的实际应用以及API设计_第7张图片
runtime的实际应用以及API设计_第8张图片
runtime的实际应用以及API设计_第9张图片
runtime的实际应用以及API设计_第10张图片

[cellshowBadgeWithStyle:WBadgeStyleNumbervalue:8];

cell.badgeCenterOffset=CGPointMake(-40,22);


runtime的实际应用以及API设计_第11张图片

还未解决的问题:如果视图使用autolaoout布局,就无法获得具体frame,badged就无法出现在右上角,只能出现在左上角.

你可能感兴趣的:(runtime的实际应用以及API设计)