MaskView的原理
在UIView中有一个属性叫Mask
1 | open var mask: UIView? |
可以通过另外一个UIView的Alpha通道和当前的UIView进行与运算,对当前的UIView进行显示,例如
1 | let view: UIView = UIView(frame: CGRect(x: 0, y: 0, width: 300, height: 100)) |
得到结果
可以看到我们把 view设置成了红色,但是只显示了50px之后maskView的部分 , 是因为除了maskView之外的像素点,在MaskView的图层Alpha通道都为0
组合SubLayer
如果我们直接更改MaskView的Frame的话,感觉View的可见尺寸 (红色部分) 变化会比较突然,没有任何平滑效果,根据Mask的原理
可以用SubLayer控制Alpha通道从而得到隐式动画效果
1 | let view: UIView = UIView(frame: CGRect(x: 0, y: 0, width: 300, height: 100)) |
此时只要更改 maskLayer 的Frame就可以获得带有动画效果Frame变化
一个音量变化的示例
如果想做麦克风音量变化、WiFi信号强度的变化的动画,可以使用这种方式,下面是一个麦克风音量变化的Demo
1 | public class SoundVolumeView : UIView { |