IOS: create a UIImage or UIImageView with rounded corners

后端 未结 12 741
执笔经年
执笔经年 2020-12-07 07:26

Is it possible create an UIImage or an UIImageView with rounded corners? Because I want take an UIImage and show it inside an UI

相关标签:
12条回答
  • 2020-12-07 08:06

    Try this Code For Round Image Import QuartzCore framework simple way to create Round Image

    imageView.layer.backgroundColor=[[UIColor clearColor] CGColor];
    imageView.layer.cornerRadius=20;
    imageView.layer.borderWidth=2.0;
    imageView.layer.masksToBounds = YES;
    imageView.layer.borderColor=[[UIColor redColor] CGColor];
    

    enter image description here

    0 讨论(0)
  • 2020-12-07 08:06
    // UIImageView+OSExt.h
    #import <UIKit/UIKit.h>
    
    @interface UIImageView (OSExt)
    - (void)setBorder:(CGFloat)borderWidth color:(UIColor*)color;
    @end
    
    // UIImageView+OSExt.m
    #import "UIImageView+OSExt.h"
    
    @implementation UIImageView (OSExt)
    - (void)layoutSublayersOfLayer:(CALayer *)layer
    {
        for ( CALayer *sub in layer.sublayers )
        {
            if ( YES == [sub.name isEqual:@"border-shape"])
            {
                CGFloat borderHalf = floor([(CAShapeLayer*)sub lineWidth] * .5);
                sub.frame = layer.bounds;
                [sub setBounds:CGRectInset(layer.bounds, borderHalf, borderHalf)];
                [sub setPosition:CGPointMake(CGRectGetMidX(layer.bounds),
                                           CGRectGetMidY(layer.bounds))];
            }
        }
    }
    
    - (void)setBorder:(CGFloat)borderWidth color:(UIColor*)color
    {
        assert(self.frame.size.width == self.frame.size.height);
        for ( CALayer *sub in [NSArray arrayWithArray:self.layer.sublayers] )
        {
            if ( YES == [sub.name isEqual:@"border-shape"])
            {
                [sub removeFromSuperlayer];
                break;
            }
        }
    
        CGFloat borderHalf = floor(borderWidth * .5);
        self.layer.cornerRadius = self.layer.bounds.size.width * .5;
    
        CAShapeLayer *circleLayer = [CAShapeLayer layer];
        self.layer.delegate = (id<CALayerDelegate>)self;
        circleLayer.name = @"border-shape";
        [circleLayer setBounds:CGRectInset(self.bounds, borderHalf, borderHalf)];
        [circleLayer setPosition:CGPointMake(CGRectGetMidX(self.layer.bounds),
                                             CGRectGetMidY(self.layer.bounds))];
        [circleLayer setPath:[[UIBezierPath bezierPathWithOvalInRect:circleLayer.bounds] CGPath]];
        [circleLayer setStrokeColor:color.CGColor];
        [circleLayer setFillColor:[UIColor clearColor].CGColor];
        [circleLayer setLineWidth:borderWidth];
    
        {
        circleLayer.shadowOffset = CGSizeZero;
        circleLayer.shadowColor = [[UIColor whiteColor] CGColor];
        circleLayer.shadowRadius = borderWidth;
        circleLayer.shadowOpacity = .9f;
        circleLayer.shadowOffset = CGSizeZero;
        }
    
        // Add the sublayer to the image view's layer tree
        [self.layer addSublayer:circleLayer];
    
        // old variant
        //CALayer *layer = self.layer;
        //layer.masksToBounds = YES;
        //layer.cornerRadius = self.frame.size.width * 0.5;
        //layer.borderWidth = borderWidth;
        //layer.borderColor = color;
    }
    @end
    

    0 讨论(0)
  • 2020-12-07 08:11

    It is possible but I'll advice you to create transparent png image (mask) with round corners and place it over you image with UIImageView. It might be quicker solution (for example if you need animations or scrolling).

    0 讨论(0)
  • 2020-12-07 08:12
    1. layer.cornerRadius = imageviewHeight/2

    2. layer.masksToBounds = true

    0 讨论(0)
  • 2020-12-07 08:13

    Objective-C

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

    Swift 3

    func makeRoundedImage(image: UIImage, radius: Float) -> UIImage {
        var imageLayer = CALayer()
        imageLayer.frame = CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height)
        imageLayer.contents = image.cgImage
    
        imageLayer.masksToBounds = true
        imageLayer.cornerRadius = radius
    
        UIGraphicsBeginImageContext(image.size)
        imageLayer.render(in: UIGraphicsGetCurrentContext())
        var roundedImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
    
        return roundedImage
    }
    
    0 讨论(0)
  • 2020-12-07 08:19

    Here how i set my rounded avatar at the center of it contain view:

    -(void)setRoundedAvatar:(UIImageView *)avatarView toDiameter:(float)newSize atView:(UIView *)containedView;
    {
        avatarView.layer.cornerRadius = newSize/2;
        avatarView.clipsToBounds = YES;
    
        avatarView.frame = CGRectMake(0, 0, newSize, newSize);
        CGPoint centerValue = CGPointMake(containView.frame.size.width/2, containedView.frame.size.height/2);
        avatarView.center = centerValue;
    }
    
    0 讨论(0)
提交回复
热议问题