Xcode UIImageView 圆角不起作用

Posted

技术标签:

【中文标题】Xcode UIImageView 圆角不起作用【英文标题】:Xcode UIImageView rounded corners doesn't work 【发布时间】:2011-10-17 18:46:37 【问题描述】:

我想让 UIImageView 显示为圆角,并在 Stack Overflow 上找到了以下代码:

loginImage = [[UIImageView alloc] initWithImage: [UIImage imageNamed:@"BlueSky.jpg"]];
CALayer *l = [loginImage layer];
[l setMasksToBounds:YES];
[l setCornerRadius:5.0];

[loginImage release];

我将此代码添加到我的 viewDidLoad 方法中,但不幸的是 UIImageView 没有给我我期望的圆角。我在 Interface Builder 中正确链接了 imageview “loginImage”。

任何想法我在这里做错了什么? 谢谢!

【问题讨论】:

很奇怪,但试试 [l setCornerRadius:5.0f];您的项目是否包含重要的框架,例如 谢谢,我试过了,但不幸的是它没有用......当视图加载时我也没有收到任何错误消息......是的,它包含所需的框架...... 好吧,如果这里的代码是满的,程序怎么知道这是子视图呢?你应该添加类似这样的 loginImage.layer = l;甚至避免制作额外的物品; [loginImage.layer setMasksToBounds:YES]; [loginImage.layer setCornerRadius:5.0f]; 根据您的建议,我替换了:CALayer *l = [loginImage layer] by CALayer *l = loginImage.layer;但没有积极的结果(尽管仍然没有错误)...我将 .h 文件中的 loginImage 声明为 IBOutlet UIImageView 并将其链接到 Interface Builder 中的 Files Owner... no no no, not l = [loginImage Layer];但是 loginImage.layer = l;这是两条不同的线路。 【参考方案1】:

如果您使用 Interface Builder 创建 UIImageView,您实际上不需要在代码中手动创建它。 所以,如果你用 IB 创建你的 UIImageView,代码应该是这样的。

CALayer *l = [loginImage layer];
[l setMasksToBounds:YES];
[l setCornerRadius:5.0];
loginImage.layer = l;

另外,适合初学者阅读memory management

【讨论】:

好的,现在我明白你的意思了,我会接受你的回答。我实际上做了: CALayer *l = loginImage.layer;在一行中。我想它是有效的?我不应该释放 loginImage 以防我手动为其分配内存吗?我阅读了有关内存管理的课程,实际上是我从中学到的... 您应该在不再需要您的对象时释放它们。例如,这通常在 -(void)dealloc 中进行;方法。所以,如果你需要你的 loginImage,你还不需要发布它。 与行 CALayer* l = loginImage.layer;你把你的 loginImage.layer 等同于 l 而不是反之亦然。【参考方案2】:
-(UIImage *)makeRoundedImage:(UIImage *) image 
                      radius: (float) radius;

  CALayer *imageLayer = [CALayer layer];
  imageLayer.frame = CGRectMake(0, 0, image.size.width, image.size.height);
  imageLayer.contents = (id) image.CGImage;

  imageLayer.masksToBounds = YES;
  imageLayer.cornerRadius = radius;

  UIGraphicsBeginImageContext(image.size);
  [imageLayer renderInContext:UIGraphicsGetCurrentContext()];
  UIImage *roundedImage = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();

  return roundedImage;

【讨论】:

以上是关于Xcode UIImageView 圆角不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 UIImageView 上设置角半径不起作用

为啥在安卓手机上圆角不起作用

Python - 枕头圆角矩形不起作用

以编程方式使用 UIImageView 自定义胶囊背景不起作用?

图像视图中的选择性圆角 - iOS

UIImageView 中的 Swift 4 UIButton 操作不起作用