Как замаскировать квадратное изображение в изображение с круглыми углами в iOS?

Я перешел на Дворак, и моя скорость набора текста увеличилась, и через 8 лет я также научился касаться шрифта.

34
задан Cœur 10 January 2019 в 05:45
поделиться

2 ответа

Вы можете использовать CoreGraphics, чтобы создать путь для круглого прямоугольника с помощью этого фрагмента кода:

static void addRoundedRectToPath(CGContextRef context, CGRect rect, float ovalWidth, float ovalHeight)
{
    float fw, fh;
    if (ovalWidth == 0 || ovalHeight == 0) {
        CGContextAddRect(context, rect);
        return;
    }
    CGContextSaveGState(context);
    CGContextTranslateCTM (context, CGRectGetMinX(rect), CGRectGetMinY(rect));
    CGContextScaleCTM (context, ovalWidth, ovalHeight);
    fw = CGRectGetWidth (rect) / ovalWidth;
    fh = CGRectGetHeight (rect) / ovalHeight;
    CGContextMoveToPoint(context, fw, fh/2);
    CGContextAddArcToPoint(context, fw, fh, fw/2, fh, 1);
    CGContextAddArcToPoint(context, 0, fh, 0, fh/2, 1);
    CGContextAddArcToPoint(context, 0, 0, fw/2, 0, 1);
    CGContextAddArcToPoint(context, fw, 0, fw, fh/2, 1);
    CGContextClosePath(context);
    CGContextRestoreGState(context);
}

И затем вызвать CGContextClip (context) ; чтобы обрезать его по прямоугольной траектории. Теперь любой выполненный рисунок, в том числе рисунок изображения, будет обрезан до круглой формы прямоугольника.

В качестве примера предположим, что «изображение» является UIImage, а оно находится в drawRect: method:

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
addRoundedRectToPath(context, self.frame, 10, 10);
CGContextClip(context);
[image drawInRect:self.frame];
CGContextRestoreGState(context);
67
ответ дан 27 November 2019 в 16:01
поделиться

Здесь даже более простой способ, доступный в iPhone 3.0 и новее. Каждый объект на основе просмотра имеет связанный слой. Для каждого слоя можно задать радиус угла, это даст вам именно то, что вы хотите:

UIImageView * roundedView = [[UIImageView alloc] initWithImage: [UIImage imageNamed:@"wood.jpg"]];
// Get the Layer of any view
CALayer * layer = [roundedView layer];
[layer setMasksToBounds:YES];
[layer setCornerRadius:10.0];

// You can even add a border
[layer setBorderWidth:4.0];
[layer setBorderColor:[[UIColor blueColor] CGColor]];

Для использования этих методов вам может потребоваться добавить:

#import <QuartzCore/QuartzCore.h>
35
ответ дан 27 November 2019 в 16:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: