无法在不更改contentMode的情况下在UIImage中绘制

时间:2017-02-02 16:10:43

标签: ios swift uiimageview swift3 uiimage

我目前正在Swift 3.0中构建一个照片过滤器,让用户可以通过平移对部分图像进行像素化处理。

为此,我首先将图像像素化,将其放入我显示的UIImageView中;然后我在顶部显示原始图像,并使用链接到"擦除"的panGestureRecognizer。擦除顶部图像部分的功能,让用户看到背后的像素化版本。

我的问题

这里的一切正常,我唯一的问题是,当pan开始时,顶部图像会被调整大小(实际上看起来它的contentMode正在切换到scaleAspectFit而不是scaleAspectFill)。

我的代码

func eraseBetween(fromPoint: CGPoint, currentPoint: CGPoint, imageView: UIImageView) {

    UIGraphicsBeginImageContextWithOptions(CGSize(width: imageView.frame.width , height: imageView.frame.height ), false, 0.0)

    imageView.image?.draw(in: imageView.bounds)

    let path = CGMutablePath()
    path.move(to: fromPoint)
    path.addLine(to: currentPoint)

    let context = UIGraphicsGetCurrentContext()!
    context.setShouldAntialias(true)
    context.setLineCap(lineType)
    context.setLineWidth(lineWidth)
    context.setBlendMode(.clear)
    context.addPath(path)
    context.strokePath()

    imageView.image = UIGraphicsGetImageFromCurrentImageContext()

    UIGraphicsEndImageContext()
}

看起来像什么

Before pan

After pan

到目前为止我尝试了什么

我尝试使用UIGraphicsBeginImageContextWithOptions的选项:没有结果

我尝试在eraseBetween函数中重新定义contentMode:无结果

现在我不知道了!

问题

有人帮我吗?非常感谢!

0 个答案:

没有答案