添加圆angular到所有UIImageViews
我想为我的项目中的所有UIImageView添加一些圆angular。 我已经得到了代码的工作,但不得不将其应用于每个图像; 我应该inheritanceUIImageView添加这个? 如果是这样,有人可以给我一些指导如何做到这一点?
这是代码
- (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; }
你可以使用UIImage的类别,这是一个类的子类的替代方法,有时更容易的一点点改变。
例如添加一个方法,该方法返回一个带有圆angular属性集的UIImage。
+(UIImage *)imageWithContentsOfFile:(NSString *)file cornerRadius:(NSInteger)...
有关Objective-c类别的更多信息,请参阅http://macdevelopertips.com/objective-c/objective-c-categories.html
检查这个 – UIImage上的圆angular
图层修改似乎是最好的方法。
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];
而不是inheritance,你可以通过UIImageView和CALayer上的简单类别实现更强大的function。
在UIImageView上创build一个类别,如下所示:
- (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; }
所以,这允许你四舍五入angular的任何组合(见UIRectCorner
),这是特别方便的,如果你想把一个图像的组风格UITableView
。 但是,这样做有一个警告。 因为我们没有UIImageView
子类,所以我们不能在layoutSubviews
注入任何代码,这意味着遮罩层可能不正确。 实际上,在configuration单元格时,调用类别方法时甚至不会设置图像视图的边界。 因此,您需要确保在添加圆angular之前设置图像视图的边界(除非使用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]; }
我有另一个类别,删除圆angular – 所有这一切是删除任何掩码,并将cornerRadius
设置为0。
是的,你应该inheritanceUIImageView,并在整个项目中使用你的自定义子类。
你可以inheritanceUIImageView,然后如果你实现了它的setNeedsDisplay方法,圆angular将在子类上工作。 (不要忘记导入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];
这可能会帮助你。