天天看點

UIview陰影與圓角混合使用

做項目遇到一個問題 就是在圓角的按鍵上加陰影失敗了 然後就有了這個日志。

讓UIView圓角顯示很簡單,隻需要三行代碼

CALayer * layer = [avatarImageView layer];  

[layer setMasksToBounds:YES];  

[layer setCornerRadius:9.0];  

但是,如給給圓角view加陰影,傳統加陰影的方法是不行的,

傳統的方法就是:

avatarImageView.layer.shadowColor = [UIColor blackColor].CGColor;  

avatarImageView.layer.shadowOffset = CGSizeMake(0, 1);  

avatarImageView.layer.shadowOpacity = 1;  

因為setMasksToBounds表示對frame外的内容進行了裁減,隻可顯示frame内的内容。由于這種方法加的陰影在frame外,是以被裁減了。

傳統方法不行,那我們可以把圓角的avatarImageView放到一個大小與它一樣的的UIView中,讓這個view有陰影,那效果看起來就一樣了。

CGRect rect;  

rect = CGRectMake(0, 0, 48, 48);  

avatarImageView = [[UIImageView alloc] initWithFrame:rect];  

avatarImageView.image = [UIImage imageNamed:@"test.png"];  

//Round the corners  

//Add a shadow by wrapping the avatar into a container  

UIView * shadow = [[UIView alloc] initWithFrame: rect];  

avatarImageView.frame = CGRectMake(0,0,rect.size.width, rect.size.height);  

// setup shadow layer and corner  

//陰影

        shadow.layer.shadowColor = [UIColor blackColor].CGColor;

        shadow.layer.shadowOffset = CGSizeMake(4, 1);//偏移量

        shadow.layer.shadowOpacity = 0.8;//透明度

        shadow.layer.shadowRadius = 4;//陰影半徑

        shadow.clipsToBounds = NO;

        btn.layer.cornerRadius=40;

        btn.clipsToBounds=YES;

// combine the views  

[shadow addSubview: avatarImageView];  

圓角陰影效果就出來了。

本文轉自 卓行天下  51CTO部落格,原文連結:http://blog.51cto.com/9951038/1615466,如需轉載請自行聯系原作者

繼續閱讀