如何清除薄侧线右下角?

问题描述 投票:1回答:1

我想复合视图的从椭圆形形状减去矩形形状,

所以首先我创建了一个面具图像:

    let paths = CGMutablePath()
    //Oval shape path at left
    let leftPath = CGPath(ellipseIn: CGRect(x: 0, y: 0, width: 200, height: 150), transform: nil)

    //Rect shape path at right
    let rightPath = CGPath(roundedRect: CGRect(x: 100, y: 100, width: 120, height: 100), cornerWidth: 8, cornerHeight: 8, transform: nil)

    paths.addPath(leftPath)
    paths.addPath(rightPath)

    UIGraphicsBeginImageContext(CGSize(width: 220, height: 200))
    let ctx = UIGraphicsGetCurrentContext()

    ctx?.addPath(paths)
    ctx?.clip(using: .evenOdd)

    ctx?.addPath(leftPath.cgPath)
    ctx?.clip(using: .evenOdd)

    ctx?.setFillColor(UIColor.red.cgColor)
    ctx?.fill(CGRect(x: 0, y: 0, width: 220, height: 200))

    //the mask image
    let maskImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

接下来我使用这个图像掩码:

    let maskView = UIImageView(image: maskImage)
    maskView.contentMode = .center    
    imageView.mask = maskView

运行应用程序,我得到这样的:

enter image description here

看起来不错?不是真的...

如果你仔细看,你会发现,在视图右下角细线

这不是为我行!

如何删除副业???谢谢 :)

ios core-graphics mask cgpath
1个回答
0
投票

绘制椭圆,然后清除圆角的矩形。

import UIKit

let ellipse = CGPath(ellipseIn: CGRect(x: 0, y: 0, width: 200, height: 150), transform: nil)
let roundedRect = CGPath(roundedRect: CGRect(x: 100, y: 100, width: 120, height: 100), cornerWidth: 8, cornerHeight: 8, transform: nil)

let maskImage = UIGraphicsImageRenderer(size: CGSize(width: 220, height: 200)).image { rendererContext in
    let ctx = rendererContext.cgContext

    ctx.setFillColor(UIColor.red.cgColor)
    ctx.addPath(ellipse)
    ctx.fillPath()

    ctx.setBlendMode(.clear)
    ctx.addPath(roundedRect)
    ctx.fillPath()
}

结果:

playground output

© www.soinside.com 2019 - 2024. All rights reserved.