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)当设置MasksToBounds为YES的时候只有圆角,并没有显示阴影
//(2)当设置MasksToBounds为NO的时候只有阴影效果,并没有显示视图的圆角效果,而是方的
//为什么会出现这样的问题???????
//***因为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