用GestureRecognizer绘制UIImage面具

我试图结合2个机制,我没有find一个解决scheme很远。 这是我想要做的:

我有一个例程,允许我在UIImage图层上绘制一个具有第二个UIImage的蒙版,在蒙版下面包含我正在绘制蒙版的图像。 这似乎工作正常,当我finfinhed我只是结合到2层,然后应用面具和图像看起来'切出'。

问题是我想能够缩放,平移蒙版和图像,以便能够在缩放模式下应用更精确的蒙版。 部分应用程序使用GestureRecognizers来移动图像进行截图,所以我认为我可以将面具绘图和手势例程结合起来。 这是我迷路的地方,它不工作。

面具绘图程序

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { swiped = false if let touch = touches.first as? UITouch { lastPoint = touch.locationInView(self.view) } } func drawLineFrom(fromPoint: CGPoint, toPoint: CGPoint) { UIGraphicsBeginImageContext(tempImageView.frame.size) let context = UIGraphicsGetCurrentContext() tempImageView.image?.drawInRect(CGRect(x: 0, y: 0, width: view.frame.size.width, height: view.frame.size.height)) CGContextMoveToPoint(context, fromPoint.x, fromPoint.y) CGContextAddLineToPoint(context, toPoint.x, toPoint.y) CGContextSetLineCap(context, kCGLineCapRound) CGContextSetLineWidth(context, brushWidth) CGContextSetRGBStrokeColor(context, 1.0, 0.0, 1.0, opacity) if maskSwitch == 1 { CGContextSetBlendMode(context, kCGBlendModeClear) } else { CGContextSetBlendMode(context, kCGBlendModeNormal) } CGContextStrokePath(context) tempImageView.image = UIGraphicsGetImageFromCurrentImageContext() tempImageView.alpha = opacity UIGraphicsEndImageContext() } override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) { swiped = true if let touch = touches.first as? UITouch { let currentPoint = touch.locationInView(self.view) drawLineFrom(lastPoint, toPoint: currentPoint) lastPoint = currentPoint } } override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) { if !swiped { // draw a single point drawLineFrom(lastPoint, toPoint: lastPoint) } } 

手势识别器程序

 @IBAction func handlePan(recognizer:UIPanGestureRecognizer) { let translation = recognizer.translationInView(self.view) recognizer.view!.center = CGPoint(x:recognizer.view!.center.x + translation.x, y:recognizer.view!.center.y + translation.y) recognizer.setTranslation(CGPointZero, inView: self.view) } func gestureRecognizer(UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer:UIGestureRecognizer) -> Bool { return true } @IBAction func handlePinch(recognizer : UIPinchGestureRecognizer) { recognizer.view!.transform = CGAffineTransformScale(recognizer.view!.transform, recognizer.scale, recognizer.scale) recognizer.scale = 1 } @IBAction func handleRotate(recognizer : UIRotationGestureRecognizer) { recognizer.view!.transform = CGAffineTransformRotate(recognizer.view!.transform, recognizer.rotation) recognizer.rotation = 0 } 

不知道这是否相关,但这是应用面具的例程

  func maskImage(image:UIImage,maskImage:UIImage)-> UIImage{ var maskRef:CGImageRef = maskImage.CGImage var mask:CGImageRef = CGImageMaskCreate(CGImageGetWidth(maskRef), CGImageGetHeight(maskRef), CGImageGetBitsPerComponent(maskRef), CGImageGetBitsPerPixel(maskRef), CGImageGetBytesPerRow(maskRef), CGImageGetDataProvider(maskRef), nil, true) var masked:CGImageRef = CGImageCreateWithMask(image.CGImage, mask) return UIImage(CGImage: masked)! } 

任何帮助,这将是伟大的。

谢谢你,安东尼