【问题标题】:Xcode UIImageView rounded corners doesn't workXcode UIImageView 圆角不起作用
【发布时间】: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;这是两条不同的线路。

标签: xcode uiimageview


【解决方案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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    相关资源
    最近更新 更多