iOS Object-C 实现 圆角、阴影、毛玻璃效果

 so cool 生气。。。大笑做开发也有一段时间啦。。。第一次。。。第一次。。。第一次。。。写写博客。。。记录下不断开发不断学习的感觉。。。

OK!今天啦是要写写在开发中遇到的给视图添加圆角、阴影和毛玻璃的效果。。。。为了解决视觉上的疲劳。。。我还专门下啦一张照片安静


在写之前啦!!!特别感谢前辈们给我提供的引导。。。。(http://www.2cto.com/kf/201304/204574.html)

 /*********************************START***********************************/

 //1.单独给图片视图设置圆角   OK  没问题

//设置视图尺寸

CGRect rect = CGRectMake(30, 84, MAIN_SCREEN_WIDTH-60, MAIN_SCREEN_HEIGHT - 84-69)//初始化UIImageView,并添加图片

    UIImageView *imageView = [[UIImageView alloc] initWithFrame:rect];

    [imageView setImage:ZJ_IMAGE(@"beautyGirl.jpg")];

     //imageView切圆角

    CALayer *layer = [imageView layer];

    [layer setMasksToBounds:YES];

    [layer setCornerRadius:15.0];

//添加到父视图上

  [self.view addSubview:imageView];

/********************************************************************/

//2.单独给图片视图设置阴影  OK  没问题

//设置视图尺寸

CGRect rect = CGRectMake(30, 84, MAIN_SCREEN_WIDTH-60, MAIN_SCREEN_HEIGHT - 84-69)//初始化UIImageView,并添加图片

    UIImageView *imageView = [[UIImageView alloc] initWithFrame:rect];

    [imageView setImage:ZJ_IMAGE(@"beautyGirl.jpg")];

    //添加阴影

    imageView.layer.shadowColor = [UIColor greenColor].CGColor;//阴影颜色

    imageView.layer.shadowOffset = CGSizeMake(5, 5);//偏移距离

    imageView.layer.shadowOpacity = 0.5;//不透明度

    imageView.layer.shadowRadius = 5.0;//半径

//添加到父视图上

  [self.view addSubview:imageView];


 /********************************************************************/

//3.同时给图片视图设置圆角和阴影 ??????


//设置视图尺寸

CGRect rect = CGRectMake(30, 84, MAIN_SCREEN_WIDTH-60, MAIN_SCREEN_HEIGHT - 84-69)//初始化UIImageView,并添加图片

    UIImageView *imageView = [[UIImageView alloc] initWithFrame:rect];

    [imageView setImage:ZJ_IMAGE(@"beautyGirl.jpg")];

 //imageView切圆角

    CALayer *layer = [imageView layer];

    [layer setMasksToBounds:YES];

    [layer setCornerRadius:15.0];


    //添加阴影

    imageView.layer.shadowColor = [UIColor greenColor].CGColor;//阴影颜色

    imageView.layer.shadowOffset = CGSizeMake(5, 5);//偏移距离

    imageView.layer.shadowOpacity = 0.5;//不透明度

    imageView.layer.shadowRadius = 5.0;//半径

//添加到父视图上

   [self.view addSubview:imageView];

//好啦现在这个鬼地方就出现奇怪的问题啦!!!!


//(1)当设置MasksToBoundsYES的时候只有圆角,并没有显示阴影

//(2)当设置MasksToBoundsNO的时候只有阴影效果,并没有显示视图的圆角效果,而是方的


//为什么会出现这样的问题???????

//***因为setMasksToBounds表示对frame外的内容进行了裁减,只可显示frame内的内容。由于这种方法加的阴影在frame外,所以被裁减了。

//***传统方法不行,那我们可以把圆角的imageView放到一个大小与它一样的的UIView中,让这个view有阴影,那效果看起来就一样了。



 /******************************方法就是**************************************/

//设置视图尺寸

CGRect rect = CGRectMake(30, 84, MAIN_SCREEN_WIDTH-60, MAIN_SCREEN_HEIGHT - 84-69)//初始化UIImageView,并添加图片

    UIImageView *imageView = [[UIImageView alloc] init];

    [imageView setImage:ZJ_IMAGE(@"beautyGirl.jpg")];

//调用阴影效果设置的方法

    UIView *shadow = [self getViewShadow:imageView withFrame:rect shadowColor:[UIColor yellowColor] shadowOffset:CGSizeMake(5, 5) shadowOpacity:0.5 shadowRadius:5 cornerRadius:15 clipsToBounds:NO];

    //添加到父视图上

    [self.view addSubview:shadow];



//阴影效果设置的方法

- (UIView *)getViewShadow:(UIView *)setView withFrame:(CGRect)frame

              shadowColor:(UIColor *)shadowColor shadowOffset:(CGSize)shadowOffset

            shadowOpacity:(CGFloat)shadowOpacity shadowRadius:(CGFloat)shadowRadius

             cornerRadius:(CGFloat)cornerRadius  clipsToBounds:(BOOL)clipsToBounds {

    //给视图设置圆角

    CALayer *layer = [setView layer];

    [layer setMasksToBounds:YES];//这个tMasksToBounds  设置为YES

    [layer setCornerRadius:cornerRadius];//设置需要设置的视图setView圆角圆角半径

    

    //给视图设置阴影,

    //1.创建一个视图设置他的阴影样式,注意这个frame和需要的setView的frame一样大小

    //***层级是   : setView在shadow之上  ---->  [shadow addSubview:setView]  ***//

    UIView *shadow = [[UIView alloc] initWithFrame:frame];//初始化一个视图并设置frame

    shadow.layer.shadowColor =shadowColor.CGColor;//设置阴影颜色

    shadow.layer.shadowOffset = shadowOffset;//设置阴影的位移

    shadow.layer.shadowOpacity = shadowOpacity;//设置阴影的透明度

    shadow.layer.shadowRadius = shadowRadius;//设置阴影的圆角半径

    shadow.layer.cornerRadius = cornerRadius;//设置该视图的圆角半径

    shadow.clipsToBounds = clipsToBounds;

    //!!!注意要重新设置需要添加的视图shadow的frame和阴影视图shadow保持一样大小

    setView.frame = shadow.bounds;

    //将需要设置的视图setView添加到阴影视图shadow上

    [shadow addSubview:setView];

    return shadow;

}

 //*******最后就完成啦同时设置圆角和阴影效果的需求!!!!!!

/*********************************LAST***********************************/

 //*********在最后还在视图添加啦毛玻璃的效果

//给图片上添加毛玻璃效果

    //1.创建毛玻璃效果

    UIBlurEffect *blur = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];

    //2.创建毛玻璃视图

    UIVisualEffectView *visualView = [[UIVisualEffectView alloc] initWithEffect:blur];

    //3.设置毛玻璃视图的大小

    [visualView setFrame:CGRectMake(0, imageView.bounds.size.height/2, imageView.bounds.size.width, imageView.bounds.size.height/2)];

    //4.将毛玻璃视图添加到图片的view上

    [imageView addSubview:visualView];


 /*********************************END***********************************/

写出来就为了更深刻的学习!!!希望得到朋友们的指正。。。大笑

 /*********************************END***********************************/




原代理下载:https://github.com/glennki/ZJRoundCornerShadow.git




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值