IOS: create a UIImage or UIImageView with rounded corners

后端 未结 12 779
执笔经年
执笔经年 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

    // UIImageView+OSExt.h
    #import 
    
    @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)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
    

提交回复
热议问题