iOS layer.mask 的原理

直接上原理

控制layer本身渲染的一个layer。效果是:比如imageLayer有一个maskLayer作为mask(注意maskLayer可以不跟imageLayer大小一样),那maskLayer透明的地方,imageLayer就不会渲染,而是变透明,显示出imageLayer之后的内容,maskLayer不透明的地方,imageLayer就会正常渲染,显示出imageLayer本来的内容如果maskLayer比imageLayer要小,那默认的maskLayer之外的地方都是透明的,都不会渲染。

由以上原理可知,如果我们想让一个视图只展示一部分,

那么我们可以通过设置其layer.mask来实现,

如果一个视图要实现一个渐变的展示,我们也可以通过

layer.mask实现

复制代码
   self.view.backgroundColor = [UIColor cyanColor];
    CALayer *layer = [[CALayer alloc] init];
    layer.frame = CGRectMake(100, 200, 100, 100);
    layer.backgroundColor = [UIColor whiteColor].CGColor;
    self.view.layer.mask = layer;

效果

整个页面只展示了一部分

复制代码
- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor cyanColor];
  
    CAGradientLayer *gradientlayer = [[CAGradientLayer alloc] init];
    gradientlayer.frame = CGRectMake(100, 100, 100, 100);
    gradientlayer.colors = @[(id)[[UIColor whiteColor] colorWithAlphaComponent:0].CGColor, (id)[[UIColor whiteColor] colorWithAlphaComponent:1].CGColor];
    gradientlayer.locations = @[@0, @1];
    self.view.layer.mask = gradientlayer;
    // Do any additional setup after loading the view.
}
相关推荐
恋猫de小郭11 小时前
腾讯 Kuikly 正式开源,了解一下这个基于 Kotlin 的全平台框架
android·前端·ios
超人强13 小时前
一文搞定App启动流程、时间监测、优化措施
ios
一牛15 小时前
Appkit: 菜单是如何工作的
macos·ios·objective-c
JQShan18 小时前
React Native小课堂:箭头函数 vs 普通函数,为什么你的this总迷路?
javascript·react native·ios
画个大饼20 小时前
Swift与iOS内存管理机制深度剖析
开发语言·ios·swift
Ya-Jun1 天前
常用第三方库:flutter_boost混合开发
android·flutter·ios
玫瑰花开一片一片2 天前
Flutter IOS 真机 Widget 错误。Widget 安装后系统中没有
flutter·ios·widget·ios widget
烎就是我2 天前
100行代码swift从零实现一个iOS日历
ios·swift
鸿蒙布道师2 天前
鸿蒙NEXT开发通知工具类(ArkTs)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei