- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的应用程序有一个带有一个 subview 的 UIScrollView。 subview 是一个扩展的 UIView,它使用 drawLayer 事件中的图层将 PDF 页面打印到自身。
使用内置的捏合功能进行缩放效果非常好。 setZoomScale 也按预期工作。
我一直在努力使用 ZoomToRect 函数。我在网上找到了一个示例,它从给定的 CGPoint 生成 CGRect ZoomRect 变量。
在touchesEnded函数中,如果双击并且它们一直缩小,我想放大到我创建的PDFUIView,就好像它们在双击的地方用捏合中心进行捏合一样。
因此,假设我将 UITouch 变量传递给我的函数,如果双击,该函数将使用 ZoomToRect。
我从在苹果网站上找到的以下功能开始:
以下是我的 UIScrollView 扩展类的修改版本:
- (void)zoomToCenter:(float)scale withCenter:(CGPoint)center {
CGRect zoomRect;
zoomRect.size.height = self.frame.size.height / scale;
zoomRect.size.width = self.frame.size.width / scale;
zoomRect.origin.x = center.x - (zoomRect.size.width / 2.0);
zoomRect.origin.y = center.y - (zoomRect.size.height / 2.0);
//return zoomRect;
[self zoomToRect:zoomRect animated:YES];
}
当我这样做时,UIScrollView 似乎使用上面的 ZoomRect 的右下边缘而不是中心进行缩放。
如果我像这样制作 UIView
UIView *v = [[UIView alloc] initWithFrame:zoomRect];
[v setBackgroundColor:[UIView redColor]];
[self addSubview:v];
出现红色框,触摸点位于中心。
请注意:我是在 PC 上写这篇文章的,我记得在 Mac 上把除以两部分搞乱了,所以假设这会绘制一个触摸点位于中心的矩形。如果 UIView 偏离中心但缩放到正确的位置,那就太好了。
但是,当它执行zoomToRect时,它似乎使用了放大结果左上角的zoomRect的右下角。
此外,我注意到根据我单击 UIScrollView 的位置,它会锚定到不同的位置。看起来几乎中间有一个十字,它以某种方式反射(reflect)了点,就好像中间左边的任何地方都是负面反射,而中间右边的任何地方都是正面反射?
这看起来很复杂,难道不应该缩放到 UIView 能够绘制的矩形吗?
我进行了大量的研究来弄清楚如何创建高质量的 PDF,所以我假设使用 CALayer 可能会抛弃坐标系?但对于 UIScrollView 来说,它应该将其视为尺寸为 768x985 的 View 。
这有点高级,请假设创建 ZoomRect 的代码都很好。 UIView 中的 CALayer 在 UIScrollView 中还有更深层次的东西......
最佳答案
好的另一个答案:
苹果提供的例程对我有用,但您需要让手势识别器将点击点转换为 imageView 坐标 - 而不是滚动条。
Apple 的示例就是这样做的,但由于我们的应用程序工作方式不同(我们更改了 UIImageView),因此在 uiscrollview 上设置了gestureRecongnizer - 效果很好,但您需要在handleDoubleTap 中执行此操作:
这大致基于苹果示例代码“TaptoZoom”,但正如我所说,我们需要将手势识别器连接到 ScrollView 。
- (void)handleDoubleTap:(UIGestureRecognizer *)gestureRecognizer {
// double tap zooms in
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(handleSingleTap:) object:nil];
float newScale = [imageScrollView zoomScale] * 1.5;
// Note we need to get location of the tap in the imageView coords, not the imageScrollView
CGRect zoomRect = [self zoomRectForScale:newScale withCenter:[gestureRecognizer locationInView:imageView]];
[imageScrollView zoomToRect:zoomRect animated:YES];
}
关于iphone - UIScrollView ZoomToRect 未缩放到给定的矩形(从 UITouch CGPoint 创建),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2384162/
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Any way of changing the duration of zoomToRect for UIS
我想平移到我的 UIScrollView 中的某个点,同时也放大到最大缩放级别。此处省略缩放矩形计算,似乎需要调用两次 zoomToRect 才能缩放和平移到我想要的位置。 [self perform
如果我有一个 UIScrollView用UIImageView其中有 1,000 x 1,000(和 contentSize 上的相同 UIScrollView)传递的 CGRect 是什么?在zoo
假设我调用了-[UIScrollView zoomToRect:animated:],动画值为YES。怎样才能立即取消这个动画,让它就像没发生过一样? 我在某些单元测试中调用此方法,并希望在下一次测试
我想我在 UIScrollView 中发现了一个错误,但我想检查其他人是否观察到同样的事情以及它是否是预期的行为。 我有一个 UIScrollView 并尝试使用 ZoomToRect 设置它正在查看
在我的 UIScrollView 自定义子类中,如何对名为 -zoomToPoint:scale:animated: 的方法进行单元测试? 我想测试此方法是否正确修改了 MyScrollView 的
有人可以向我解释一下这段代码吗?它用于使用 Swift 在 iOS 应用程序中缩放图像,但我不明白它为什么起作用 let scrollViewSize = scrollView.bounds.size
有什么方法可以指定[UIScrollView zoomToRect:zoomRect animated:YES]的动画持续时间吗? 目前是快速 animated:YES 或即时 animated:NO
我有一个显示图像的 UIScrollView。我想以编程方式放大到当前可见区域中心附近某处的矩形(不一定要精确)。我将如何获得此矩形的坐标以与 zoomToRect 一起使用?请注意,此图像可能已经放
我的 UIScrollView 在使用 zoomToRect 时没有设置它的 contentOffset。 我有一个 UIScrollView,里面有一个 UIImageView。到目前为止,滚动和缩
我有一个 UIScrollView A 和一个 subview B,(它本身是 contentView DA 的 strong> - 所以 B 不是 ScrollView A 的 contentVie
我的应用程序有一个带有一个 subview 的 UIScrollView。 subview 是一个扩展的 UIView,它使用 drawLayer 事件中的图层将 PDF 页面打印到自身。 使用内置的
最近几天我开始使用 Objective C,我真的很难理解 uiscrollview。我想让 View 围绕大于屏幕尺寸的图像移动,并且每次点击屏幕时都可能放大/缩小。为了尝试一些早期测试,我在下面编
谁能准确描述 -[UIScrollView zoomToRect:animated:] 的行为?这种方法似乎确实做了一些复杂的事情,但 Apple 的文档非常稀少。 当内容大小在宽度和/或高度上小于
我需要密切监视 ScrollView 的比例,以便我可以根据 ScrollView 的动画缩放更新内容 View 的元素(管理多个 CALayers 的 subview )。 在 iOS 3.1 上,
我是一名优秀的程序员,十分优秀!