【问题标题】:Swift - Cropping images *outside* of allowsEditingSwift - 在allowsEditing 之外* 裁剪图像
【发布时间】:2015-08-16 21:00:42
【问题描述】:

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

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

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

感谢您的帮助。请,谢谢!

导入 UIKit

类视图控制器: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)
}

}

【问题讨论】:

  • 这个问题提出的很好,但范围很广。您似乎在问“我如何制作图像编辑器?”您是否遇到任何具体问题?

标签: swift image-processing uiimagepickercontroller


【解决方案1】:

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

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

EDIT-示例代码

你可以这样做:

   @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

【讨论】:

  • 感谢您的意见!我已经在我的原始帖子中编辑了代码。我现在可以通过 UIPinchGestureRecognizer 缩放图像,但是,这是在缩放整个视图。我只想放大图片 within photoImageView。我相信这就是你的建议。任何有关如何缩放照片而不是整个视图的见解都将不胜感激!谢谢!
  • 再次感谢您的帮助!我已经设置了 CALayer,并在 imageView 中添加了一个手势识别器。缩放有效,但它仍在缩放整个视图。不是层。我需要图层保持在 imageView 的范围内。 (如果您熟悉 CSS,请将其视为溢出:隐藏)。任何线索如何实现?谢谢
猜你喜欢
  • 2016-06-16
  • 2017-04-12
  • 2020-08-14
  • 1970-01-01
  • 2015-02-02
  • 2017-05-22
  • 1970-01-01
  • 2021-12-03
  • 2015-08-10
相关资源
最近更新 更多