1.主旨:如题
2.目的:
a.更好的控制试图的层级关系
b.减少遇到一些特殊情况出现bug的几率
3.事例: 使用渐变的代码和添加imageView的IB
- (void)viewDidLoad{
/** * 情况1:addSublayer */
[self.view.layer addSublayer:[self shadowAsInverse]];
/** * 情况2:insertSublayer */
[self.view.layer insertSublayer:[self shadowAsInverse] atIndex:0];
}
- (CAGradientLayer *)shadowAsInverse;
{
CAGradientLayer *newShadow = [[CAGradientLayer alloc] init]; CGRect newShadowFrame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height); newShadow.frame = newShadowFrame;
//添加渐变的颜色组合
newShadow.colors = [NSArray arrayWithObjects:(id)[UIColor colorWithHexString:@"333333"].CGColor,
(id)[UIColor colorWithHexString:@"8100E8"].CGColor,nil];
return newShadow;
}
情况一

情况二

出现两种不同情况的原因,在于渐变的方法:
其实这个方法是在layer上面添加了layer所以新添加的layer覆盖掉了self.view上的内容,也就是IB上面添加的图片!
而方法二,设置layer插入的位置为0,也就是图层的最底层,所以方法二IB上面设置的iamgeView能正常显示!
注意:
UIView的addSubView的原理是:把子view的layer加载到父view的layer上,如果你用addSubViewLayer的方法给父view加Layer,就会覆盖掉子view的layer,所以父view中的子view会看不见,如果用 [self.view.layer insertSublayer:[self shadowAsInverse] atIndex0 可以把layer加载到父view的layer的底层,就会看到这个效果
网友评论