IOS:UIImageView 设置边框白色半径和阴影

Pha*_*inh 5 objective-c uiimageview ios

这是我设置边框、阴影和角的代码

// set border
[self.avatarImageView.layer setBorderColor: [[UIColor whiteColor] CGColor]];
[self.avatarImageView.layer setBorderWidth: 2.0];

// set shadow
[self.avatarImageView.layer setShadowOffset:CGSizeZero];
[self.avatarImageView.layer setShadowOpacity:1.0];
self.avatarImageView.clipsToBounds = NO;

// set corner
self.avatarImageView.layer.cornerRadius = 10.0;
self.avatarImageView.layer.masksToBounds = YES;
Run Code Online (Sandbox Code Playgroud)

如果我只使用set borderand的代码set corner,它就像这样工作得很好

在此处输入图片说明

但是如果我添加代码set corner,我会得到这样的结果(边框和角半径有效,但阴影消失了)

在此处输入图片说明

然而,如果它单独存在,则设置角落的代码工作完美。请指导我该怎么做。任何帮助将不胜感激

更新
关注@ozgur 答案。在我的代码中添加 2 行,它会提供非常漂亮的视图,但阴影会小一点

self.avatarImageView.layer.shouldRasterize = YES;
self.avatarImageView.layer.shadowPath = [UIBezierPath bezierPathWithRoundedRect:self.avatarImageView.bounds cornerRadius:10].CGPath;
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

Alb*_*haw 5

圆角需要将 maskToBounds 设置为 YES。因此,超出边界的任何东西(如阴影)都无法显示,因为它将被掩盖/剪掉。如果您禁用了 maskToBounds 以使其显示,那么圆角将不起作用,因为它们无法将您的图像屏蔽/剪辑成圆角形状,因为您禁用了 maskToBounds。

因此,您不能在一个视图上同时执行这两项操作——因此您需要两个视图。

您需要使 UIView 与 UIImageView 具有相同的尺寸,并使 UIImageView 成为 UIView 的子视图。

然后在您的 UIImageView 上将 maskToBounds 设置为 YES,并在其超级视图(具有相同尺寸的 UIView)上将 maskToBounds 设置为 NO 并相应地添加属性。


将您的代码更改为:(使用 xCode 输入所有内容,因此我可能有错别字)

UIView *avatarImageViewHolder = [[UIView alloc] initWithFrame:self.avatarImageView.frame];
avatarImageViewHolder.backgroundColor = [UIColor clearColor];
[avatarImageView.superview addSubview:avatarImageViewHolder];
avatarImageViewHolder.center = avatarImageView.center;
[avatarImageViewHolder addSubview:avatarImageView];
avatarImageView.center = CGPointMake(avatarImageViewHolder.frame.size.width/2.0f, avatarImageViewHolder.frame.size.height/2.0f);


self.avatarImageView.layer.masksToBounds = YES;
avatarImageViewHolder.layer.masksToBounds = NO;


// set avatar image corner
self.avatarImageView.layer.cornerRadius = 10.0;

// set avatar image border
[self.avatarImageView.layer setBorderColor: [[UIColor whiteColor] CGColor]];
[self.avatarImageView.layer setBorderWidth: 2.0];

// set holder shadow
[avatarImageViewHolder.layer setShadowOffset:CGSizeZero];
[avatarImageViewHolder.layer setShadowOpacity:1.0];
avatarImageViewHolder.clipsToBounds = NO;
Run Code Online (Sandbox Code Playgroud)