IOS CALayer,图片圆角阴影效果

//
//  ViewController.m
//  图层的基本使用
//

#import "ViewController.h"
#import "UIImage+CZ.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *imgView;
@property (weak, nonatomic) IBOutlet UIView *redView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    //获取圆角图片
    UIImage *image = [UIImage cornerImageWithImageName:@"papa" cornerRadius:10 borderWidth:2 borderColor:[UIColor redColor]];
    
    // 学习CALayer的属性
    
    //autoLayout影响的尺寸设置
    // 设置阴影颜色
    self.redView.layer.shadowColor = [UIColor blackColor].CGColor;
    // 阴影的透明度
    self.redView.layer.shadowOpacity = 0.5;
    
    // 阴影的位置
    self.redView.layer.shadowOffset = CGSizeMake(150, 150);
    
    // 设置内容 一般设置图片,并且的图片的数据类型为CGImageRef
    self.redView.layer.contents = (id)image.CGImage;
    
    /*
     *1.如果你设置了masksToBounds为YES,阴影是不出,原因,阴影也被切掉了
     *2.如果你想有圆角的效果,又想有阴影,图片本来就有圆角效果
     *3.获取话说:自己把图片转换成有圆角的图片,再显示
     */
    
}

-(void)test1{
    //autoLayout影响的尺寸设置
    // 设置尺寸
    self.redView.layer.bounds = CGRectMake(0, 0, 150, 150);
    
    // 设置边框的颜色
    self.redView.layer.borderColor =[UIColor blackColor].CGColor;
    // 设置边框的宽度
    self.redView.layer.borderWidth = 2;
    
    // 设置背景颜色
    self.redView.layer.backgroundColor = [UIColor greenColor].CGColor;
    
    // 设置圆角效果
    self.redView.layer.cornerRadius = 10;
    
    // 如果圆角周边的剪掉的话,设置一个属性
    self.redView.layer.masksToBounds = YES;
    
    // 设置阴影颜色
    self.redView.layer.shadowColor = [UIColor blackColor].CGColor;
    // 阴影的透明度
    self.redView.layer.shadowOpacity = 0.5;
    
    // 阴影的位置
    self.redView.layer.shadowOffset = CGSizeMake(150, 150);
    
    // 设置内容 一般设置图片,并且的图片的数据类型为CGImageRef
    self.redView.layer.contents = (id)[UIImage imageNamed:@"papa"].CGImage;
    
    /*
     *1.如果你设置了masksToBounds为YES,阴影是不出,原因,阴影也被切掉了
     *2.如果你想有圆角的效果,又想有阴影,图片本来就有圆角效果
     *3.获取话说:自己把图片转换成有圆角的图片,再显示
     */
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end


图片圆角效果

//
//  UIImage+CZ.h
//  图层的基本使用
//

#import 

@interface UIImage (CZ)

//把一图片,裁剪成圆角的效果,圆角大小、边框、边框颜色的新图片
+(UIImage *)cornerImageWithImageName:(NSString *)imageName cornerRadius:(CGFloat)cornerRadius borderWidth:(CGFloat)borderWidth borderColor:(UIColor *)borderColor;

@end


//
//  UIImage+CZ.m
//  图层的基本使用
//
#import "UIImage+CZ.h"

@implementation UIImage (CZ)

+(UIImage *)cornerImageWithImageName:(NSString *)imageName cornerRadius:(CGFloat)cornerRadius borderWidth:(CGFloat)borderWidth borderColor:(UIColor *)borderColor{

    UIImage *sourceImage = [UIImage imageNamed:imageName];
    //生成一张新图片
    //1.开上一个位图上下文
    UIGraphicsBeginImageContextWithOptions(sourceImage.size, NO, 0.0);
    
    //2.把图片画在 位图上下文
    //2.1图片要裁剪成有圆角
    CALayer *layer = [CALayer layer];//图层里有一张图片
    
#warning 图层的大小一定要设置
    //图层设置大小
    layer.bounds = CGRectMake(0, 0, sourceImage.size.width, sourceImage.size.height);
    
    //设置内容
    layer.contents = (id)sourceImage.CGImage;
    
    //设置圆角
    layer.cornerRadius = cornerRadius;
    //裁剪
    layer.masksToBounds = YES;
   
    //设置边框
    layer.borderWidth = borderWidth;
    
    //设置边框颜色
    layer.borderColor = borderColor.CGColor;
    
    
    [layer renderInContext:UIGraphicsGetCurrentContext()];
    
    //3.从位图上下文 获取新图片
    UIImage *newImg = UIGraphicsGetImageFromCurrentImageContext();
    
    //4.结束位图的编辑
    UIGraphicsEndImageContext();
    
    //5.返回新图片
    return newImg;
}

@end



你可能感兴趣的:(ios)