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的边界。谢谢你的帮助。