Add rounded corners to all UIImageViews

I would like to add some rounded corners to all of the UIImageViews in my project. I have already got the code working, but am having to apply it to every image; should I subclass UIImageView to add this? If so, can someone give me some pointers as to how to do this?

Here is the code

  • Custom Alert (UIAlertView) with swift
  • How do I get parse to play a certain song when a button in the cell is clicked?
  • Property cannot be found on forward class object?
  • Core Data Model Design
  • WKWebView and UIMenuController
  • Request failed: unacceptable content-type: text/html using AFNetworking 2.0
  • - (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;
    }
    

    6 Solutions Collect From Internet About “Add rounded corners to all UIImageViews”

    You could use a category for UIImage which is an alternate way to subclass a Class and sometimes easier for just small changes.

    e.g add a method that returns a UIImage with the rounded corner attributes set.

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

    more info on Objective-c categories can be found http://macdevelopertips.com/objective-c/objective-c-categories.html

    Check this –
    Rounded Corners on UIImage

    The layer modification seems to be the best way.

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

    Rather than subclassing, you can achieve more powerful functionality through simple categories on UIImageView and CALayer.

    Create a category on UIImageView like this:

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

    This calls a category method on 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;
    }
    

    So, this allows you to round any combination (see UIRectCorner) of corners, which is especially handy if you want to put an image in a group style UITableView. There is one caveat when doing this however. Because we’ve not subclassed UIImageView, we cannot inject any code into layoutSubviews, which means that the mask layer may not be correct. In fact, when configuring cells, the bounds of the image view won’t even be set when you call the category method. Hence, you need to ensure the bounds of the image view is set before adding rounded corners (except if using UIRectCornersAllCorners).

    Here is some code which does this:

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

    I have another category which removes rounded corners – all that does is remove any masks and set the cornerRadius to 0.

    Yes, you should subclass UIImageView, and use your custom subclass throughout your project.

    You can subclass UIImageView and then if you implement its setNeedsDisplay method the round corners will work on subclasses. (don’t forget to import QuartzCore)

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

    Try this,

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

    this may help you.