我设置了一个非常非常简单的项目,允许您单击“浏览照片”按钮。然后,用户从照片库中选择一张照片,并将其显示在以编程方式创建的 UIImageView 上。
就像魅力一样。但是 - 我缺少所需的关键功能。
我需要用户能够在图像显示在 UIImageView 中之后缩放图像(通过捏合和拖动)。 allowedEditing = 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)
}
}
最佳答案
不久前我也做过类似的事情。我将图像添加到 UIImageView 的 layer 属性中,将手势识别器添加到 View 中,并实现修改图层属性而不是 View 的手势回调。将图像添加到 UIImageView 的图层就可以了。作为旁注,我想补充一点,每个 UIView 都受 CALayer 类支持。它有很多方法和属性,有助于动态更改 View ,在您的情况下,这将通过手势来完成。
作为替代方案,您还可以使用 CALayer 的 hitTest 方法,而不是实现手势识别器的回调。
编辑-示例代码
你可以做这样的事情:
@IBOutlet weak var imageView: UIImageView!
var imageViewLayer: CALayer{
return imageView.layer
}
在viewDidLoad中,设置图片
imageViewLayer.contents = UIImage(named: "CoreDataDemoApp")?.CGImage
imageViewLayer.contentsGravity = kCAGravityResizeAspect
将捏合手势添加到 Storyboard中的 ImageView (或以编程方式),并在回调中您可以执行以下操作:
@IBAction func pinchGestureRecognized(sender: AnyObject) {
imageViewLayer.transform = CATransform3DMakeScale(sender.scale, sender.scale, 1)
}
这只是为了让您了解它如何工作,而不是完整的代码。希望这有帮助!
这是另一种方法:
关于Swift - 裁剪允许编辑*外部*的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32039907/