短Cocoa 1.0.2

短Cocoa 1.0.2

hughkli维护。



短Cocoa 1.0.2

  • hughkli

短Cocoa

在iOS和macOS中使用简化且可链式语法编辑属性的字符串和布局。

快速教程

【attributedString 拼接】// 生成一个 NSAttributedString,并将其字体设置为20大小的系统字体,并将 foregroundColor 设置为 rgb(10, 20, 30) $(@"abc").font(@20).textColor(@"10, 20, 30").attrString;

// 生成一个 NSMutableAttributedString,并设置其 font, textColor,lineHeight,并增加下划线效果(即 NSUnderlineStyleAttributeName) $(@"abc").font(UIFontObj).textColor(UIColorObj).lineHeight(22).underline.mAttrString;

// 生成一个包含图片的 NSAttributedString,内容为:"@"ca[图片]b" $(@"a").addImage(UIImageObj, 0, 1, 2).add(@"b").prepend(@"c").attrString;

// 生成一个 NSAttributedString,内容为:"@"a[空白间距]bc[图片]",其中 @"a"是12号红色字体,@"b"是13号绿色字体,@"c"是14号蓝色字体,然后这个字符串整体行高为 23pt $(@"a").textColor(@"red").font(@12) .addSpace(5) .add($(@"b").textColor(@"green").font(@13)) .add($(@"c").textColor(@"blue").font(@14)) .addImage(UIImageObj, 0, 0, 0) .lineHeight(23).attrString;

【frame 布局】// 等价于 view.frame = CGRectMake(30, 40, 10, 20) $(view).width(10).height(20).x(30).y(40);

// 调用 sizeToFit,然后在 superview 里垂直居中、y 值设置为 20 $(view).sizeToFit.horAlign.y(20);

// 把 label 宽度设置为 “button 的宽度值”、把高度设置为”view 的高度值 + 10“、水平移动到 midX 为 30 的位置、在 superview 里垂直居中 $(label).width(button.$width).height(view.$height + 10).midX(30).verAlign;

// 把 view1、view2、view3 整体在 superview 里水平居中,然后整体移动到距离 superview 底部为 20 的位置 // tips:你可以这样同时包装多个对象整体调整,即使其中某个对象为 nil 也无所谓 $(view1, view2, view3).groupHorAlign.groupBottom(20);

【view 操作】// 创建一个 UIButton 并设置它的一些属性,最后将其赋值给 self.button self.button = $(UIButton).textColor(@"red").font(@12).text(@"hello").alpha(0.5).addTo(self.view).get;

// 将 label, button, imageView 的 hidden 属性设置为 YES $(label, button, imageView).hide;

该框架带来的好处不赘述,该框架可能带来的坏处是: 1)为了看懂你使用 ShortCocoa 编写的代码,你的同事也必须花时间了解 ShortCocoa 的语法。(你可以考虑避免使用某些好用但学习成本较高的方法,比如 heightToFit,或上面的 attributedString 拼接教程中的最后一个例子)

2)为了参数灵活而丢失了编译期类型检查,比如 $(button).textColor(@"red") 方法可以传入 UIColor, @"red", @"#aabbcc" 等各种合法对象,但如果你传入了诸如 UIFont 等错误类型也仍然可以通过编译。(在 Debug 模式下,这些类型错误会在运行时通过 NSAssert 警告你)

3)增加了维护复杂度,比如之前你们可以通过全文搜索 "hidden =" 来快速定位到所有可能更改 hidden 属性的代码,但现在由于多了 $(view).hide 这个语法,仅仅搜索 "hidden =" 就不够了。(该框架主要用在“attrString 拼接”、“布局”、“view 操作”三个场景中,你可以避免在 “view 操作” 场景中使用该框架,因为操作 view 的代码本来就不复杂,因此使用该框架带来的效率提升也就不是特别明显。而 attrString 和布局的原生代码很复杂又往往集中在一处不需全文搜索,因此很适合使用该框架处理)

可能的命名空间冲突: 1)该框架默认占用了 $() 这个语法,请确保你的项目中没有别的 #define $(...)。你也可以更改为其他语法,比如你想用 "ooo(label, button)" 这种语法,那直接把 ShortCocoa.h 里的 define 里的 "$" 改成 "ooo" 即可 2)该框架给 UIView/NSView 增加了以下分类方法:$x, $midX, $midY, $y, $midY, $maxY, $width, $height, $size, $bestSize, $bestWidth, $bestHeight,详见 ShortCocoa+Layout.h 3)该框架给 CALayer 增加了以下分类方法:$x, $midX, $midY, $y, $midY, $maxY, $width, $height, $size,详见 ShortCocoa+Layout.h