Ios UIView作为maskView-原点按约束常量移动

Ios UIView作为maskView-原点按约束常量移动,ios,swift,uiview,nslayoutconstraint,cgpoint,Ios,Swift,Uiview,Nslayoutconstraint,Cgpoint,我试图实现一个用户使用的照片裁剪工具,我卡住了。我有一个UIView(imagecrapper),它位于UIImageView(imagetobeedite)的顶部(z顺序),其中包含正在裁剪的图像。如果此时使用其他配置和逻辑运行应用程序,imageCropper就在图像的正上方。但是,当我将imageToBeedite的maskView设置为imageCropper时,imageCropper的原点会移动。在弄乱了约束常量之后,我确定它将根据前导约束的精确值移动到更大的x,并根据顶部约束的精确

我试图实现一个用户使用的照片裁剪工具,我卡住了。我有一个
UIView
imagecrapper
),它位于
UIImageView
imagetobeedite
)的顶部(z顺序),其中包含正在裁剪的图像。如果此时使用其他配置和逻辑运行应用程序,
imageCropper
就在图像的正上方。但是,当我将
imageToBeedite
maskView
设置为
imageCropper
时,
imageCropper
的原点会移动。在弄乱了约束常量之后,我确定它将根据前导约束的精确值移动到更大的x,并根据顶部约束的精确值移动到更大的y

另一个让这一点更加令人困惑的信息是,我在
imagecrapper
的顶部(同样是z顺序)有另一个
UIView
imagecrapperorder
),它只是一个可见的边框。我将它的帧设置为与
imageCropper
完全相同的帧,但它们都应该在这里

我没有对
imagecrapper
imagecrapperorder
设置任何约束

我的问题是为什么
imageCropper
会移动,以及如何解决此问题?

在尝试了几种不同的方法来创建一个启用用户后,平滑移动裁剪工具我回到这个解决方案,通过编程方式获取
viewdiload
中的约束值,然后在
viewdilayoutsubview
中调整
imagecrapper
的原点,简单地创建了x和y偏移量,效果很好

但是,我在
ViewController
的视图上设置了一个
pangesture识别器。一旦我开始拖动照片(
imageCropper
)进行裁剪,
imageCropper
原点再次向下移动。我尝试将偏移逻辑添加到处理识别器的函数中,但它似乎是在复合更改并将帧发送到屏幕之外。(每次收到识别器时,我都会重置翻译。)

代码:

override func viewDidLayoutSubviews() {
    resizedImageFrame = AVMakeRectWithAspectRatioInsideRect(imageToEdit.image!.size, imageToEdit.bounds)
    let resizedImageCenter = imageToEdit.center
    let resizedImageX = resizedImageCenter.x - (resizedImageFrame.width / 2)
    let resizedImageY = resizedImageCenter.y - (resizedImageFrame.height / 2)
    resizedImageFrame.origin = CGPoint(x: resizedImageX, y: resizedImageY)
    currentImageFrame = resizedImageFrame
    imageCropperBorder.frame = resizedImageFrame
    imageCropper.frame = CGRectOffset(resizedImageFrame, -cropperXOffset, -cropperYOffset)
    // imageCropper.frame above is set with the offset discussed. If I set it
    // to simply resizedImageFrame it does NOT appear where imageCropperBorder is
}

一如既往,如果您将
imagecrapper
设置为
imageView
的maskView,将非常感谢您的帮助。它将使用
imageView
的坐标系定位
imageCropper
,因此对于
imageCropper
,点(0,0)不在
ViewController
视图的左上角,而是
imageView
视图的左上角

我想补充的是,将视图设置为maskView会使其成为该视图的子视图。(我最后检查了这个调用.superview。)另外,因为我处理的是一个调整大小的图像,所以我不得不做一些计算,不能按原样使用superview的边界。谢谢你的帮助。