iphone - 当图像放大太大时,UIPinchGestureRecognizer 表现得很有趣
<p><p>我有一个简单的应用程序,我在其中将 UIPinchGestureRecognizer 和 UIPanGestureRecognizer 附加到 imageView,以便我可以拖动和缩放它。我已经做到了,因此可以将 imageView 部分移出屏幕并最小化显示,但图像的一小部分 75 像素仍保留在显示屏上,因此可以将图像拖回其上。因此,例如,如果我尝试将 imageView 拖离显示器的右侧,它将在剩余 75 个像素的 imageView 时停止,留出足够的空间让我将其拖回。与缩放相同的概念,我创建的边界框架防止 imageView 被最小化显示。 </p>
<p>无论如何,我的 UIPinchGestureRecognizer 委托(delegate)方法中的边界代码存在这个问题。我做边界的方式是我正在创建一个框架,它是 imageViewssuperView 的副本 - 除了它在每侧以及顶部和底部被插入 75 像素。我检查 imageView 是否与此框架不相交,然后我知道它已到达右/左或上/下的边界之一。它在大多数情况下都有效,但是当我将图像放大到相当大时(通常超过 1000 x 1000),边界不起作用 - 如果我进行超快速最小化比例,则 imageView 会被完全推离屏幕所以我不能把它拖回来。</p>
<p>我只是想知道为什么会这样。它与图像尺寸太大有关吗?还是我的代码有缺陷? (我在下面列出)。如果有人可以提供帮助,将不胜感激。</p>
<pre><code>- (void)scale:(UIPinchGestureRecognizer *)sender
{
if( == UIGestureRecognizerStateBegan)
{
lastScale = ;
}
if ( == UIGestureRecognizerStateBegan ||
== UIGestureRecognizerStateChanged)
{
CGFloat currentScale = [[.layer valueForKeyPath:@"transform.scale"] floatValue];
CGFloat newScale = 1 -(lastScale - );// * (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([ transform], newScale, newScale);
[ setTransform: transform];
lastScale = ;;
}
}
}
</code></pre></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>我注意到我必须检查缩放的 NaN(不是数字)结果,然后分别处理它们。使用 isnan() 进行检查。</p></p>
<p style="font-size: 20px;">关于iphone - 当图像放大太大时,UIPinchGestureRecognizer 表现得很有趣,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/7979662/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/7979662/
</a>
</p>
页:
[1]