我正在研究Profile Design。我想在图像的底部实现自定义曲线,并将角落广播应用于顶部。我已经用UIBeziarPath的RoundCorners方法尝试过。但是我没有得到正确的结果。
这是我的尝试:-
1)我正在使用这种方法来达到目的。
//MARK : - Extension set UIImageView Corner Radius
extension UIImageView {
func roundCorners(_ corners: UIRectCorner, radius: CGFloat) {
let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
let mask = CAShapeLayer()
mask.path = path.cgPath
self.layer.mask = mask
}
}
2)在viewDidLoad方法中。
override func viewDidLoad() {
super.viewDidLoad()
self.imgView.roundCorners([.bottomLeft, .bottomRight], radius: 36)
self.imgView.layer.cornerRadius = 10
}
3)这是我的结果:-
但是,我想达到这个结果。像是底部曲线
谢谢。
答案 0 :(得分:0)
您可以向imageView添加任何形状的蒙版
示例:
-(void) viewDidAppear:(BOOL)animated {
self.view.backgroundColor = [UIColor lightGrayColor];
UIImageView* yourView = [[UIImageView alloc] initWithFrame:CGRectMake(200, 200, 200, 200)];
yourView.center = self.view.center;
yourView.image = [UIImage imageNamed:@"testImg"];
yourView.clipsToBounds = YES;
[self.view addSubview: yourView];
CGFloat roundedHeight = yourView.frame.size.height * 0.2;
CGFloat bottomOvalHeight = roundedHeight * 2;
//First part of mask - oval in the bottom
UIBezierPath *ovalPath = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0,
yourView.frame.size.height - bottomOvalHeight, yourView.frame.size.width,
bottomOvalHeight)];
//Second part of mask - rectangle from top to the middle of the oval
UIBezierPath *rectPath = [UIBezierPath bezierPathWithRect:CGRectMake(0,
0,
yourView.frame.size.width,
yourView.frame.size.height - roundedHeight)];
//Make one mask from two parts
[rectPath appendPath:ovalPath];
CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.path = rectPath.CGPath;
yourView.layer.mask = maskLayer;
}
结果: