gpt4 book ai didi

iphone - 当图像放大太大时,UIPinchGestureRecognizer 表现得很有趣

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:18:03 25 4
gpt4 key购买 nike

我有一个简单的应用程序,我将 UIPinchGestureRecognizer 和 UIPanGestureRecognizer 附加到 imageView,以便我可以拖动和缩放它。我已经做到了,因此 imageView 可以部分移出屏幕并最小化显示,但图像的一小部分 75 像素保留在显示器上,因此可以将图像拖回它上面。因此,例如,如果我尝试将 imageView 拖离显示的右侧部分,它将在 imageView 剩余 75 像素时停止,只留下足够的空间供我将其拖回。与缩放相同的概念,我创建的边界框防止 imageView 从显示中最小化。

无论如何,我的 UIPinchGestureRecognizer 委托(delegate)方法中的边界代码遇到了这个问题。我做边界的方式是我正在创建一个框架,它是 imageViews super View 的副本 - 除了它在每一侧以及顶部和底部被插入 75 像素。我检查 imageView 是否与此框架不相交,然后我知道它已到达右/左或上/下的边界之一。它在大多数情况下都有效,但是当我将图像放大到相当大时(通常超过 1000 x 1000),边界不起作用 - 如果我执行超快速最小化比例,imageView 将完全推离屏幕所以我不能把它拖回去。

我只是想知道为什么会这样。它与图像尺寸变得太大有关吗?还是我的代码有缺陷? (我在下面列出)。如果有人可以提供帮助,我们将不胜感激。

- (void)scale:(UIPinchGestureRecognizer *)sender 
{
if([sender state] == UIGestureRecognizerStateBegan)
{
lastScale = [sender scale];
}

if ([sender state] == UIGestureRecognizerStateBegan ||
[sender state] == UIGestureRecognizerStateChanged)
{
CGFloat currentScale = [[[sender view].layer valueForKeyPath:@"transform.scale"] floatValue];
CGFloat newScale = 1 - (lastScale - [sender scale]);// * (CropThePhotoViewControllerPinchSpeed);
newScale = MAX(newScale, CropThePhotoViewControllerMinScale / currentScale);

CGFloat scaledWidth = newScale * sender.view.frame.size.width;
CGFloat scaledHeight = newScale * sender.view.frame.size.height;

CGRect translatedRect = CGRectMake(sender.view.frame.origin.x, sender.view.frame.origin.y, scaledWidth, scaledHeight);
CGRect boundaryRect = CGRectMake(sender.view.superview.frame.origin.x + CropThePhotoViewControllerBoundaryBuffer, sender.view.superview.frame.origin.y + CropThePhotoViewControllerBoundaryBuffer, sender.view.superview.frame.size.width - (CropThePhotoViewControllerBoundaryBuffer * 2), sender.view.superview.frame.size.height - (CropThePhotoViewControllerBoundaryBuffer * 2));

if (!(!CGRectIntersectsRect(boundaryRect,translatedRect) && newScale < 1))
{
CGAffineTransform transform = CGAffineTransformScale([[sender view] transform], newScale, newScale);
[[sender view] setTransform: transform];
lastScale = [sender scale];;
}
}
}

最佳答案

我注意到我必须检查缩放的 NaN(不是数字)结果,然后分别处理它们。使用 isnan() 检查。

关于iphone - 当图像放大太大时,UIPinchGestureRecognizer 表现得很有趣,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7979662/

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