gpt4 book ai didi

ios - UIPinchGestureRecognizer 变换不从中心调整大小

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:08:35 30 4
gpt4 key购买 nike

问题:我在 View Controller 上有一个捏合手势识别器,我用它来缩放嵌套在 View Controller 内的图像。下面的变换工作正常,除了图像是从左上角而不是中心缩放的。我希望它从中心开始缩放。

设置:

  • 设置为 Aspect Fill 模式的 UIImageView(嵌套在几个 View 中,原点设置为中心)。
  • 容器 View Controller 上的 UIPinchGestureRecognizer

我验证了:

  • ImageView 的 anchor 是 (0.5, 0.5)
  • 中心在每次变换后移动
  • 对 View 或其父级没有自动布局约束(至少在构建时)

此外,我尝试在转换后设置 UIImageView 的中心,直到用户完成捏合后更改才会生效。

我不想让图像在触摸时居中,因为图像比 View Controller 小。

CGFloat _lastScale = 1.0;
- (IBAction)pinch:(UIPinchGestureRecognizer *)sender {
if ([sender state] == UIGestureRecognizerStateBegan) {
_lastScale = 1.0;
}

CGFloat scale = 1.0 - (_lastScale - [sender scale]);
_lastScale = [sender scale];
CGAffineTransform currentTransform = self.imageView.transform;
CGAffineTransform newTransform = CGAffineTransformScale(currentTransform, scale, scale);
[self.imageView setTransform:newTransform];
NSLog(@"center: %@", NSStringFromCGPoint(self.imageView.center));
}

这是一个演示该问题的完整项目。 https://github.com/adamloving/PinchDemo

最佳答案

no auto layout constraints on the view or its parent (at least at build time)

如果您的 nib/ Storyboard使用自动布局,那么肯定存在自动布局约束,即使您没有刻意构建它们。让我们面对现实吧,自动布局不能很好地处理 View 变换。比例变换应该从中心开始缩放,但自动布局与您作对,迫使框架在其顶部和左侧重置(因为这是约束所在的位置)。

在这里查看我关于这个主题的文章:

How do I adjust the anchor point of a CALayer, when Auto Layout is being used?

另见 discussion of this problem in my book .

在您的情况下,最简单的解决方案可能是将转换应用于 View 的,而不是 View 本身。换句话说,与其说这样的话:

self.v.transform = CGAffineTransformMakeScale(1.3, 1.3);

说这样的话:

self.v.layer.transform = CATransform3DMakeScale(1.3, 1.3, 1);

关于ios - UIPinchGestureRecognizer 变换不从中心调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20938338/

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