gpt4 book ai didi

ios - UIView 作为 maskView- 由约束常量移动的原点

转载 作者:搜寻专家 更新时间:2023-11-01 07:23:28 24 4
gpt4 key购买 nike

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

另一条信息使这更令人困惑,是我在 imageCropper 简单地充当可见边框。我将它的框架设置为与 imageCropper 完全相同的框架,但它是它们应该在的位置。

我没有对 imageCropperimageCropperBorder 设置任何限制。

我的问题是为什么 imageCropper 会移动,我该如何解决这个问题?

在尝试了几种不同的方法来创建用户启用的、平滑移动的裁剪工具后,我回到了这个解决方案,并通过以编程方式获取 viewDidLoad 中的约束值来简单地创建 x 和 y 偏移量,并且然后在 viewDidLayoutSubviews 中调整 imageCropper 的原点,这就奏效了。

但是,我在 ViewController 的 View 上设置了一个 panGestureRecognizer。一旦我开始拖动照片 (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
}

一如既往,我们将不胜感激。

最佳答案

当您将 imageCropper 设置为 imageView 的 maskView 时。它将使用 imageView 的坐标系来定位 imageCropper,因此对于 imageCropper,点 (0,0) 不在 ViewController 的 View 的左上角,但 imageView 的左上角。

关于ios - UIView 作为 maskView- 由约束常量移动的原点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37517294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com