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)
圆角需要将 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)
| 归档时间: |
|
| 查看次数: |
1285 次 |
| 最近记录: |