1. 簡單陰影
我們給layer設置了shadowOpacity后就能得到一個簡單的陰影
view.layer.shadowOpacity = 1;
shadowOpacity設置了陰影的不透明度,取值范圍在0~1
這里shadow有一個默認值
shadowOffset = CGSizeMake(0, -3)
shadowRadius = 3.0
注意:如果view沒有設置背景色陰影也是不會顯示的
2. 陰影屬性
layer中與陰影相關的屬性有以下幾個
(CGColorRef*) shadowColor//陰影顏色
(float) shadowOpacity//陰影透明度
(CGSize) shadowOffset//陰影偏移量
(CGFloat) shadowRadius//模糊計算的半徑
(CGPathRef*) shadowPath//陰影路徑
3. shadowColor 陰影顏色
- (void)AddLaterShadowColor {
self.layer.shadowOpacity = 1;
self.layer.shadowColor = [UIColor redColor].CGColor;
self.layer.shadowColor = [UIColor blueColor].CGColor;
self.layer.shadowColor = [UIColor yellowColor].CGColor;
}
4. shadowOpacity 透明度
- (void)AddLaterShadowOpacity {
self.layer.shadowOpacity = 1;
self.layer.shadowColor = [UIColor whiteColor].CGColor;
self.layer.shadowOpacity = 0.2;
self.layer.shadowOpacity = 0.6;
self.layer.shadowOpacity = 0.9;
}
5. shadowOffset. 偏移量
- (void)AddLaterShadowOpacity {
self.layer.shadowOpacity = 1;
self.layer.shadowColor = [UIColor whiteColor].CGColor;
self.layer.shadowOffset = CGSizeMake(0,0);
self.layer.shadowOffset = CGSizeMake(5,0);
self.layer.shadowOffset = CGSizeMake(-5,0);
self.layer.shadowOffset = CGSizeMake(0,5);
self.layer.shadowOffset = CGSizeMake(0,-5);
self.layer.shadowOffset = CGSizeMake(5,5);
self.layer.shadowOffset = CGSizeMake(-5,-5);
}
6. shadowRadius
shadowRadius其實可以理解為陰影的寬度
- (void)AddLayerShadowRadius {
self.layer.shadowOpacity = 1;
self.layer.shadowColor = [UIColor whiteColor].CGColor;
self.layer.shadowRadius = 0;
self.layer.shadowRadius = 3;
self.layer.shadowRadius = 10;
}
7. shadowPath
- (void)p_setupSubViews {
self.view.backgroundColor = [UIColorwhiteColor];
[selfp_setupViewWithY1:100];
[selfp_setupViewWithY2:170];
[selfp_setupViewWithY3:240];//貝塞爾曲線未閉合
}
- (void)p_setupViewWithY1:(CGFloat)y {
UIView*view = [[UIViewalloc] initWithFrame:CGRectMake(30, y, [UIScreenmainScreen].bounds.size.width -60,50)]; view.backgroundColor = [UIColorwhiteColor];
[self.view addSubview:view];
view.layer.shadowOpacity =1;
UIBezierPath*path = [UIBezierPathbezierPathWithRect:view.bounds];
view.layer.shadowPath = path.CGPath;
}
- (void)p_setupViewWithY2:(CGFloat)y {
UIView*view = [[UIViewalloc] initWithFrame:CGRectMake(30, y, [UIScreenmainScreen].bounds.size.width -60,50)]; view.backgroundColor = [UIColorwhiteColor];
[self.view addSubview:view];
view.layer.shadowOpacity =1;
UIBezierPath*path = [UIBezierPathbezierPath];
[path moveToPoint:CGPointMake(0,0)];
[path addLineToPoint:CGPointMake(0, view.frame.size.height +10)];
[path addLineToPoint:CGPointMake(view.frame.size.width, view.frame.size.height +10)];
[path addLineToPoint:CGPointMake(view.frame.size.width,0)];
[path addLineToPoint:CGPointMake(0,0)];
view.layer.shadowPath = path.CGPath;
}
- (void)p_setupViewWithY3:(CGFloat)y {
UIView*view = [[UIViewalloc] initWithFrame:CGRectMake(30, y, [UIScreenmainScreen].bounds.size.width -60,50)]; view.backgroundColor = [UIColorwhiteColor];
[self.view addSubview:view];
view.layer.shadowOpacity =1;
view.layer.shadowOffset =CGSizeMake(0,0);
UIBezierPath*path = [UIBezierPathbezierPath];
[path moveToPoint:CGPointMake(-5,0)];
[path addLineToPoint:CGPointMake(-5, view.frame.size.height)];
[path addLineToPoint:CGPointMake(view.frame.size.width, view.frame.size.height)];
[path addLineToPoint:CGPointMake(view.frame.size.width,0)];
view.layer.shadowPath = path.CGPath;
}
shadow path
當用bounds設置path時,看起來的效果與只設置了shadowOpacity一樣
但是添加了shadowPath后消除了離屏渲染問題
注意:
使用陰影的時候 self.layer.masksToBounds 不能=YES,否則陰影部分會截掉
UIImageView 添加陰影的時候是加在UIImageView.image上,會出現陰影渲染在image四周,在UIImageView里
