iOS中的陰影效果


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里

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM