IOS: маскируйте UIImage с помощью UIBezierPath
Я пытаюсь замаскировать изображение, чтобы я мог дать ему только два закругленных угла. С кодом, который у меня есть, он просто добавляет маску в белый цвет над изображением, но, похоже, не применяет ее. Что мне нужно сделать для маскировки углов изображения?
CAShapeLayer *maskLayer = [CAShapeLayer layer];
UIBezierPath *roundedPath = [UIBezierPath bezierPathWithRoundedRect:maskLayer.bounds byRoundingCorners:UIRectCornerTopLeft | UIRectCornerBottomRight cornerRadii:CGSizeMake(16.f, 16.f)];
maskLayer.fillColor = [[UIColor whiteColor] CGColor];
maskLayer.backgroundColor = [[UIColor clearColor] CGColor];
maskLayer.path = [roundedPath CGPath];
// Add mask
self.imageView.layer.mask = maskLayer;
Ответы
Ответ 1
Два раунда в UIView
Как упоминалось в вышеупомянутом связанном вопросе, вам, вероятно, необходимо удалить представление из иерархии, прежде чем применять его маску.
[self.imageView removeFromSuperview];
self.imageView.layer.mask = maskLayer;
[self.view addSubview:self.imageView];
Кроме того, ваш maskLayer
не имеет bounds
. Вы должны установить его в frame
(или bounds
) вида, которое вы пытаетесь замаскировать.
CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.frame = self.imageView.frame;