1.首先說一下關於我對遮罩的理解吧
第一:遮罩我感覺就是當遮罩層的alpha通道爲0的時候就是透明的,反之則顯示,只是背景色變爲被遮罩層的背景色,(感覺跟PS中的蒙版差不多原理);
第二:例子,假設,我這邊有A,B2個View,其中A的背景色爲純綠色,B爲label,text=@“我是遮罩層”;
然後就可以A.maskView = B;那麼就把B看做是A的遮罩層(MaskView),最終的顯示結果是,顯示的字爲綠色的“我是遮罩層”,
額,大概的效果就是這樣子,具體的話,代碼來實現以下吧
maskView:
//遮罩背景層,相當於A層 UIView *maskView = [[UIView alloc]initWithFrame:self.gradientLabel.frame]; maskView.backgroundColor = [UIColor redColor]; [self.view addSubview:maskView]; [self.view addConstraints:[self getLayoutConstraintWithView:maskView SupperView:self.gradientLabel Inset:UIEdgeInsetsMake(0, 30, 0, 120)]]; //遮罩層 相當於B層 UILabel *newLabel = [[UILabel alloc]init]; newLabel.numberOfLines = 0; newLabel.text = @"LabelLabelLabelLabel"; //關於這個,遮罩層要不要ADD進父視圖,額,我這邊的實驗結果是可以不ADD進去,當然ADD進父視圖貌似也沒有影響 // [self.view addSubview:newLabel]; // [self.view addConstraints:[self getLayoutConstraintWithView:newLabel SupperView:self.gradientLabel Inset:UIEdgeInsetsZero]]; maskView.maskView = newLabel; //設置了mask之後,一定要記住,重新設置B層的frame,此時可以看成B層是A層的subView來定位 CGRect frame = self.gradientLabel.bounds; frame.origin.x = -30; frame.size.width += 30; newLabel.frame = frame;
顯示結果:
關於layer的Mask
//可以定義layer // CALayer *layer = [CALayer layer]; // layer.frame = CGRectMake(50, 50, 100, 200); // layer.backgroundColor = [UIColor greenColor].CGColor; // [self.view.layer insertSublayer:layer atIndex:0]; //也可以定義imageView UIImageView *image = [[UIImageView alloc]initWithFrame:CGRectMake(50, 50, 100, 200) ]; image.image = [UIImage imageNamed:@"app1.png"]; [self.view addSubview:image]; UILabel *label = [[UILabel alloc]init]; label.frame = CGRectMake(0, 0, 100, 0); label.font = [UIFont systemFontOfSize:25]; label.text = @"我是遮罩層"; label.numberOfLines = 0; [label sizeToFit]; //記住,如果用的是layer的mask,那麼遮罩層一定要ADD到父視圖中 [self.view addSubview:label]; image.layer.mask = label.layer; label.frame = image.layer.bounds;
顯示結果:
這個關於Mask(遮罩層)大致需要注意的就是這些了,
那麼說一說我爲什麼會用到這個屬性吧,因爲我這邊需要用到一個顏色漸變的Label,(額,網上別人也有,只是當時沒理解,現在自己做一遍的話,理解透徹點)
那麼這裏就需要用到一個漸變的類CAGradientLayer
CAGradientLayer *layer = [[CAGradientLayer alloc]init]; layer.frame = CGRectMake(50, 50, 100, 200); layer.colors = @[(id)[UIColor greenColor].CGColor,(id)[UIColor blueColor].CGColor,(id)[UIColor yellowColor].CGColor]; layer.startPoint = CGPointMake(0, 1); layer.endPoint = CGPointMake(1,1); [self.view.layer insertSublayer:layer atIndex:0]; //也可以定義imageView // UIImageView *image = [[UIImageView alloc]initWithFrame:CGRectMake(50, 50, 100, 200) // ]; // image.image = [UIImage imageNamed:@"app1.png"]; // [self.view addSubview:image]; UILabel *label = [[UILabel alloc]init]; label.frame = CGRectMake(0, 0, 100, 0); label.font = [UIFont systemFontOfSize:25]; label.text = @"我是遮罩層我是遮罩層"; label.numberOfLines = 0; [label sizeToFit]; //記住,如果用的是layer的mask,那麼遮罩層一定要ADD到父視圖中 [self.view addSubview:label]; layer.mask = label.layer; label.frame = layer.bounds;
效果:
額 好了 到此結束了