Swift - 在allowEditing外面裁剪图像*

时间:2015-08-16 21:00:43

标签: swift image-processing uiimagepickercontroller

我有一个非常简单的项目设置,允许您单击“浏览照片”按钮。然后,用户从他们的照片库中选择一张照片,并将其显示在以编程方式创建的UIImageView上。

像魅力一样工作。但是 - 我缺少必需的关键功能。

我需要用户能够在显示在UIImageView中之后缩放图像(通过捏合和拖动)。 allowsEditing = true,允许用户在之前裁剪。我需要类似的功能,允许他们在主UI上进行编辑。

帮助表示赞赏。拜托,谢谢!!

导入UIKit

类ViewController:UIViewController {

@IBOutlet weak var imageView: UIImageView!


var imageViewLayer: CALayer{
    return imageView.layer
}


override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    imageViewLayer.contents = UIImage(named: "ss3.jpg")?.CGImage
    imageViewLayer.contentsGravity = kCAGravityResizeAspect

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}



@IBAction func newGesture(sender: AnyObject) {
    imageViewLayer.transform = CATransform3DMakeScale(sender.scale, sender.scale, 1)
}

}

1 个答案:

答案 0 :(得分:0)

我做了类似的事情。我将图像添加到UIImageView的图层属性中,为视图添加了手势识别器,并实现了修改图层属性而不是视图的手势回调。将图像添加到UIImageView的图层就可以了。作为旁注,我想补充说CALayer类支持每个UIView。它有很多方法和属性可以帮助动态更改视图,在您的情况下将通过手势完成。

作为替代方案,您还可以使用CALayer的 hitTest 方法,而不是实现手势识别器的回调。

编辑 - 示例代码

你可以这样做:

   @IBOutlet weak var imageView: UIImageView!

    var imageViewLayer: CALayer{
        return imageView.layer
    }

viewDidLoad 中,设置图片

imageViewLayer.contents = UIImage(named: "CoreDataDemoApp")?.CGImage
imageViewLayer.contentsGravity = kCAGravityResizeAspect

在故事板中(或以编程方式)向图像视图添加捏合手势,在其回调中,您可以执行以下操作:

@IBAction func pinchGestureRecognized(sender: AnyObject) {
   imageViewLayer.transform = CATransform3DMakeScale(sender.scale, sender.scale, 1)  
}

同样,这只是为了让您了解它是如何工作的,而不是完整的代码。希望这有帮助!

这是另一种方法:

Stackoverflow link to related question