图片擦除场景
适用于解谜类,图片擦除得到图片下东西。或者绘图类,图片擦除,只展示图片其中一部分。
方式一
通过clip方式,将想要展示的图片区域给展示出来。
方式二
通过上下文的clear,让图片部分区域擦除掉。
let imageView = UIImageView(frame: CGRectMake(10, 350, 400, 200))
view.addSubview(imageView)
let image0 = UIImage(named: "9")!
let render = UIGraphicsImageRenderer(size: CGSizeMake(400, 200))
let timage = render.image { context in
let cgContext = context.cgContext
image0.draw(in: CGRectMake(0, 0, 400, 200))
cgContext.clear(CGRectMake(50, 50, 100, 40)) //在图片上可用
}
imageView.image = timage
通过这种方式,可以实现根据手指滑动,清除图片内容。
方式三
通过blendMode实现图片擦除,当然,其他blendMode能够实现更多更加复杂的效果,具体可参考官方文档。
let imageView = UIImageView(frame: CGRectMake(10, 350, 400, 200))
view.addSubview(imageView)
let image0 = UIImage(named: "9")!
let blendModes: [CGBlendMode] = [.clear, .color, .colorBurn, .colorDodge, .copy, .darken, .destinationAtop, .destinationIn, .destinationOut, .destinationOver, .difference, .exclusion, .hardLight, .hue, .lighten, .luminosity, .multiply, .normal, .overlay, .plusDarker, .plusLighter, .saturation, .screen, .softLight, .sourceAtop, .sourceIn, .sourceOut, .xor] //28种,根据业务需求处理不同业务逻辑
let w1 = imageView.size.width / CGFloat(blendModes.count)
let render = UIGraphicsImageRenderer(size: CGSizeMake(400, 200))
let timage = render.image { context in
let cgContext = context.cgContext
image0.draw(in: CGRectMake(0, 0, 400, 200))
cgContext.clear(CGRectMake(50, 50, 100, 40)) //在图片上可用
UIColor.red.setFill()
for i in 0..<blendModes.count {
cgContext.setBlendMode(blendModes[i])
cgContext.fill([CGRectMake(w1*CGFloat(i), 100, w1, 20)])
}
}
imageView.image = timage