首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >向所有UIImageViews添加圆角

向所有UIImageViews添加圆角
EN

Stack Overflow用户
提问于 2010-01-31 19:37:21
回答 6查看 64.9K关注 0票数 78

我想在我的项目中为所有的UIImageViews添加一些圆角。我已经让代码正常工作了,但是我必须将它应用于每个图像;我应该子类UIImageView来添加它吗?如果是这样的话,有人能给我一些关于如何做到这一点的建议吗?

以下是代码

代码语言:javascript
运行
复制
- (void)viewDidLoad {
    [super viewDidLoad];
    NSString *mainpath = [[NSBundle mainBundle] bundlePath];
    welcomeImageView.image = [UIImage imageWithContentsOfFile:[mainpath stringByAppendingString:@"/test.png"]];
    welcomeImageView.layer.cornerRadius = 9.0;
    welcomeImageView.layer.masksToBounds = YES;
    welcomeImageView.layer.borderColor = [UIColor blackColor].CGColor;
    welcomeImageView.layer.borderWidth = 3.0;
    CGRect frame = welcomeImageView.frame;
    frame.size.width = 100;
    frame.size.height = 100;
    welcomeImageView.frame = frame;
}
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-01-31 19:50:31

您可以为UIImage使用一个类别,这是对一个类进行子类化的另一种方式,有时对于小的更改也更容易。

例如,添加一个方法,它返回一个设置了圆角属性的UIImage。

代码语言:javascript
运行
复制
+(UIImage *)imageWithContentsOfFile:(NSString *)file cornerRadius:(NSInteger)... 

有关Objective-c类别的更多信息,请访问http://macdevelopertips.com/objective-c/objective-c-categories.html

票数 25
EN

Stack Overflow用户

发布于 2010-01-31 20:29:40

检查这个- Rounded Corners on UIImage

图层修改似乎是最好的方法。

代码语言:javascript
运行
复制
UIImageView * roundedView = [[UIImageView alloc] initWithImage: [UIImage imageNamed:@"wood.jpg"]];
// Get the Layer of any view
CALayer * l = [roundedView layer];
[l setMasksToBounds:YES];
[l setCornerRadius:10.0];
票数 114
EN

Stack Overflow用户

发布于 2012-05-09 19:53:18

您可以通过UIImageView和CALayer上的简单类别实现更强大的功能,而不是子类化。

在UIImageView上创建类别,如下所示:

代码语言:javascript
运行
复制
- (void)maskRoundCorners:(UIRectCorner)corners radius:(CGFloat)radius {
    // To round all corners, we can just set the radius on the layer
    if ( corners == UIRectCornerAllCorners ) {
        self.layer.cornerRadius = radius;
        self.layer.masksToBounds = YES;
    } else {
        // If we want to choose which corners we want to mask then
        // it is necessary to create a mask layer.
        self.layer.mask = [CALayer maskLayerWithCorners:corners radii:CGSizeMake(radius, radius) frame:self.bounds];
    }
}

这将调用CALayer上的category方法:

代码语言:javascript
运行
复制
+ (id)maskLayerWithCorners:(UIRectCorner)corners radii:(CGSize)radii frame:(CGRect)frame {

    // Create a CAShapeLayer
    CAShapeLayer *mask = [CAShapeLayer layer];

    // Set the frame
    mask.frame = frame;

    // Set the CGPath from a UIBezierPath
    mask.path = [UIBezierPath bezierPathWithRoundedRect:mask.bounds byRoundingCorners:corners cornerRadii:radii].CGPath;

    // Set the fill color
    mask.fillColor = [UIColor whiteColor].CGColor;

    return mask;
}

因此,这允许你圆角的任何组合(见UIRectCorner),这是特别方便的,如果你想把一个图像放在一个组风格的UITableView。然而,在这样做的时候有一个警告。因为我们没有继承UIImageView的子类,所以我们不能向layoutSubviews注入任何代码,这意味着遮罩层可能不正确。实际上,在配置单元格时,调用category方法时甚至不会设置图像视图的边界。因此,您需要确保在添加圆角之前设置图像视图的边界(使用UIRectCornersAllCorners时除外)。

下面是实现这一点的一些代码:

代码语言:javascript
运行
复制
        // Perform corner rounding
        UIRectCorner corners = !UIRectCornerAllCorners;
        if (indexPath.row == 0) 
            corners = UIRectCornerTopLeft;
        if (indexPath.row == numberOfRowsInTheTable)  
            corners |= UIRectCornerBottomLeft;

        if (corners > 0) {
            cell.imageView.bounds = CGRectMake(0.f, 0.f, [self.tableView rowHeight], [self.tableView rowHeight]);
            [cell.imageView maskRoundCorners:corners radius:10.f];
        } else {
            [cell.imageView removeRoundCornersMask];
        }

我有另一个类别,它删除圆角-所有做的是删除任何掩码,并将cornerRadius设置为0。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2171506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档