我有一个简单的应用程序,我在其中将 UIPinchGestureRecognizer 和 UIPanGestureRecognizer 附加到 imageView,以便我可以拖动和缩放它。我已经做到了,因此可以将 imageView 部分移出屏幕并最小化显示,但图像的一小部分 75 像素仍保留在显示屏上,因此可以将图像拖回其上。因此,例如,如果我尝试将 imageView 拖离显示器的右侧,它将在剩余 75 个像素的 imageView 时停止,留出足够的空间让我将其拖回。与缩放相同的概念,我创建的边界框架防止 imageView 被最小化显示。
无论如何,我的 UIPinchGestureRecognizer 委托(delegate)方法中的边界代码存在这个问题。我做边界的方式是我正在创建一个框架,它是 imageViews super View 的副本 - 除了它在每侧以及顶部和底部被插入 75 像素。我检查 imageView 是否与此框架不相交,然后我知道它已到达右/左或上/下的边界之一。它在大多数情况下都有效,但是当我将图像放大到相当大时(通常超过 1000 x 1000),边界不起作用 - 如果我进行超快速最小化比例,则 imageView 会被完全推离屏幕所以我不能把它拖回来。
我只是想知道为什么会这样。它与图像尺寸太大有关吗?还是我的代码有缺陷? (我在下面列出)。如果有人可以提供帮助,将不胜感激。
- (void)scaleUIPinchGestureRecognizer *)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/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |