UIView as maskView- origin通过约束常量移动

时间:2016-05-30 03:43:24

标签: ios swift uiview nslayoutconstraint cgpoint

我正在尝试实施用户使用的照片裁剪工具并且卡住了。我有一个UIViewimageCropper)位于UIImageViewimageToBeEdited)的顶部(z顺序),其中包含正在裁剪的图像。如果我此时运行应用程序,使用其他配置和逻辑,imageCropper就在图像的顶部。但是,当我将maskView的{​​{1}}设置为imageToBeEdited时,imageCropper的来源会发生变化。在弄乱了约束常数之后,我确定它正在通过前导约束的精确值移动到更大的x,并且通过顶部约束的精确值移动更大的y。

另一条让这更令人困惑的信息是,我在imageCropper的{​​{1}}顶部(再次按z顺序)有另一个UIViewimageCropperBorder)作为一个可见的边界。我将它的帧设置为与imageCropper完全相同的帧,但它们应该是它们所在的位置。

我没有在imageCropperimageCropper设置约束。

我的问题为什么imageCropperBorder会发生变化?如何解决此问题?

尝试了几种不同的方法来创建一个用户启用的,平滑移动的裁剪工具后,我回到了这个解决方案,并通过编程方式抓住约束来创建x和y偏移。 imageCropper中的值,然后在viewDidLoad中调整imageCropper的来源并确保其有效。

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

代码:

imageCropper

与往常一样,任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

imageCropper设置为imageView的maskView时。它将使用imageView的坐标系来定位imageCropper,因此对于imageCropper,点(0,0)不在ViewController&# 39;视图的左上角,但imageView的左上角。