前不久即刻更新到了2.0,总体 UI 虽然朴实了很多,但也不乏一些精致的效果,好比收藏按钮,效果以下,代码已上传githubgit
实现这个效果须要三个元素github
最下层利用 maskLayer 创造一个爱心形状的 Viewapp
中间层添加一个镂空的 ImageView 用于显示爱心边框工具
最上层须要一个用于显示填充动画的View动画
maskLayer 这里就不过多介绍了,若是用代码建立一个爱心形状的 maskLayer 也未免太麻烦,
虽然有paintcode这样的工具存在,因此直接用图片建立 maskLayer 是最佳方案:spa
- (void)setMaskImage:(UIImage *)maskImage{ _maskImage = maskImage; if (!_maskLayer) { self.maskLayer = [CALayer layer]; self.maskLayer.frame = CGRectMake(0,0, _maskImage.size.width, _maskImage.size.height); self.layer.mask = _maskLayer;// 必须设置frame } self.maskLayer.contents = (id)[_maskImage CGImage]; }
这里也验证下即刻是用图片建立 maskLayer 的事实,从 ipa 包中提取 Assets.car 文件,实际上这个文件就是Images.xcassets
,
可是 Mac 上不能直接打开,因此就须要用到ThemeEngine工具,浏览里面的内容就能够找到:code
很显然第一张图片就是用于建立 maskLayer,另外一张就是用于第二个元素的建立,只须要简单的添加一个 Iamgevieworm
- (void)setBorderImage:(UIImage *)borderImage{ _borderImage = borderImage; if (!_borderImageView) { self.borderImageView = [[UIImageView alloc] init]; self.borderImageView.frame = CGRectMake(0,0, _borderImage.size.width, _borderImage.size.height); [self addSubview:_borderImageView]; } self.borderImageView.image = _borderImage; [self sendSubviewToBack:_borderImageView]; }
最后,利用 setFillColor 方法建立 fillView,设置 transform 来配合以后的动画图片
- (void)setFillColor:(UIColor *)fillColor{ _fillColor = fillColor; if (!_fillView) { self.fillView = [[UIView alloc] initWithFrame:self.bounds]; self.fillView.layer.cornerRadius = self.bounds.size.width * 0.5f; self.fillView.transform = CGAffineTransformMakeScale(0, 0); [self addSubview:_fillView]; } self.fillView.backgroundColor = _fillColor; }