向所有 UIImageView 添加圆角

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

这是密码

- (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;
}
64939 次浏览

是的,您应该继承 UIImageView 类,并在整个项目中使用自定义子类。

您可以为 UIImage 使用一个类别,这是子类的一种替代方法,有时对于小的更改更容易。

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

+(UIImage *)imageWithContentsOfFile:(NSString *)file cornerRadius:(NSInteger)...

更多关于 Objective-c 类别的信息可以找到 http://macdevelopertips.com/objective-c/objective-c-categories.html

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

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

- (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 上的分类方法:

+ (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) ,需要确保设置图像视图的边界。

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

        // 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];
}

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

您可以子类 UIImageView,然后如果您实现其 SetNeedsDisplay方法,圆角将在子类上工作。(别忘了进口 QuartzCore)

-(void)setNeedsDisplay {
self.layer.cornerRadius = 5;
self.layer.masksToBounds = YES;
[self.layer setBorderColor:[[UIColor whiteColor] CGColor]];
[self.layer setBorderWidth: 2.0];
}

试试这个,

coverImage.image = [UIImage imageWithContentsOfFile:@"coverImage.png"];
coverImage.layer.masksToBounds = YES;
coverImage.layer.cornerRadius = 10.0;
coverImage.layer.borderWidth = 1.0;
coverImage.layer.borderColor = [[UIColor brown] CGColor];

这个可能对你有帮助。