Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IOS:UIImageView设置边框白色半径和阴影_Ios_Objective C_Uiimageview - Fatal编程技术网

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

IOS:UIImageView设置边框白色半径和阴影,ios,objective-c,uiimageview,Ios,Objective C,Uiimageview,这是我设置边界、阴影和角的代码 // set border [self.avatarImageView.layer setBorderColor: [[UIColor whiteColor] CGColor]]; [self.avatarImageView.layer setBorderWidth: 2.0]; // set shadow [self.avatarImageView.layer setShadowOffset:CGSizeZero]; [self.avatarImageView

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

// 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;
如果我只使用
设置边框
设置角
的代码,它会像这样工作

但是如果我添加代码
设置角点
,我会得到这样的结果(边界和角点半径起作用,但阴影消失了)

但是,如果设置角的代码保持独立,那么它就可以完美地工作。 请指导我做什么。任何帮助都将不胜感激

更新
跟随@ozgur的答案。在我的代码中添加2行,这将提供一个非常漂亮的视图,但是阴影稍微小一点

self.avatarImageView.layer.shouldRasterize = YES;
self.avatarImageView.layer.shadowPath = [UIBezierPath bezierPathWithRoundedRect:self.avatarImageView.bounds cornerRadius:10].CGPath;

如果不想剪裁阴影,则应更新
层。阴影路径

 self.avatarImageView.layer.shouldRasterize = YES;
 self.avatarImageView.layer.shadowPath = [UIBezierPath bezierPathWithRoundedRect:self.avatarImageView.bounds cornerRadius:10].CGPath;
要使此技巧起作用,
clipstobunds
和他的兄弟
masksToBounds
应设置为
NO


因此,如果您有一个大小大于avatarView自身边界的图像,则应将avatarImageView定义为普通
UIView
,创建另一个图像视图以显示图像将其
masksToBounds
设置为
YES
,并将其作为子视图添加到
avatarImageView
中,这样您将拥有一个良好的角落和阴影视图,能够显示剪裁图像

您应该设置self.avatarImageView.clipstobunds=YES在
设置角中

您需要添加一个容器视图并将图像视图移动到该容器视图中,执行此操作后使用此代码:

CALayer *imageViewLayer= self.imageView.layer;
imageViewLayer.cornerRadius= 20.0f;
imageViewLayer.masksToBounds= YES;

CALayer *containerLayer = self.containerView.layer;
containerLayer.borderColor= [UIColor whiteColor].CGColor;
containerLayer.borderWidth= 3.0f;
containerLayer.cornerRadius= 20.0f;
containerLayer.shadowOffset = CGSizeMake(0, 0);
containerLayer.shadowColor = [UIColor blackColor].CGColor;
containerLayer.shadowRadius = 10.0f;
containerLayer.shadowOpacity = 0.80f;
containerLayer.masksToBounds= NO;
containerLayer.shadowPath = [[UIBezierPath bezierPathWithRect:containerLayer.bounds] CGPath];

您可以根据需要随意调整设置。享受吧

圆角要求将masksToBounds设置为YES。因此,无法显示超出边界的任何内容(如阴影),因为它将被遮罩/剪掉。如果禁用masksToBounds使其显示,则圆角将不起作用,因为禁用masksToBounds后,圆角无法将图像遮罩/剪裁为圆形

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

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

然后在UIImageView上将masksToBounds设置为YES,在其“superview”(具有相同维度的UIView)上将masksToBounds设置为NO,并相应地添加属性


将您的代码更改为:(使用xCode键入所有代码,这样我就有可能输入错误)


什么是
self.view
?我复制了您的代码并运行了它。在我看来,这张照片剪得很短。您确定没有在其他任何地方更新
masksToBounds
clipsToBounds
吗?@ozgur我确定没有在其他地方更新
masksToBounds
clipsToBounds
place@ozgur对不起,我混淆了
self.view
self.avatarImageView
,我已经更新了我的代码和密码picture@ozgur你会看到阴影消失了,我已经设置了self.avatarImageView.clipsToBounds=NO在集合
阴影中
。现在,我应该将其更改为“是”,或者我需要向
设置角添加一个新行代码。另外,我试着做得更好,但还是不行。结果图像与我帖子中的第二张图像相同。谢谢你的回答,但当我使用你的代码时,我会得到与我帖子中图片一样的结果(圆角半径不起作用)@PhanVănLinh抱歉,我的代码中有一个小的输入错误,我已修复,现在请尝试。抱歉,延迟回复。它现在工作得很好。非常感谢;)@AlbertRenshaw无需使用2个UIView或子视图来获取应用的角半径和border@KanhaiyaSharma你确定吗?如果你尝试做圆角半径,它将遮罩阴影,如果你禁用遮罩,它将不会是圆角。据我所知,谢谢你的回答。我将结果图像发布到我的问题中。我将在我的项目中使用您的解决方案,因为它很漂亮,但我将保留这个问题,以找到使阴影变大一点的方法。因此,您提到我将
clipstobunds
masksToBounds
设置为NO,但是如果我将
masksToBounds=NO
设置为NO。半径没有改变work@PhanVănLinh如果要使阴影看起来更大,则应更新阴影偏移。
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;