Захват и смешивание каждый раз, когда drawRect:
звучит слишком тяжело.
Кажется, что вы хотите смешать какое-то изображение с бэкэндом с помощью различных режимов смешивания и альфа.
В этом случае, вам лучше смешать весь вид и использовать view.layer.mask
, чтобы показать только замаскированную область результата наложения.
Так что вы можете просто перемещать, вращать и изменять размер view.layer.mask
, без захвата или смешиваниянужно.Это должно быть намного быстрее.
Примерно так.
class MyView: UIImageView {
var backendImage: UIImage?
var blendImage: UIImage?
var blendMode: CGBlendMode = .normal
var alphaBlend: Float = 0.5
func setup(backend: UIView) {
self.backendImage = self.captureView(backend)
self.image = self.createBlendImage()
self.layer.mask = self.createMask()
}
func captureView(view: UIView) -> UIImage {
// capture view
}
func createBlendImage() -> UIImage {
// prepare ImageContext, draw two image, get image, and so on...
}
func createMask() -> CALayer {
let mask = CAShapeLayer()
// setup the shape of mask
}
func moveMask(origin: CGPoint, scale: Float, rotation: Float) {
// change mask
self.layer.mask.frame = ...
self.layer.mask.transform = ...
}
}