我的应用程序有一个带有一个子视图的 UIScrollView。子视图是一个扩展的 UIView,它使用 drawLayer 事件中的图层将 PDF 页面打印到自身。
使用内置的捏合功能进行缩放效果非常好。 setZoomScale 也按预期工作。
我一直在努力使用 ZoomToRect 函数。我在网上找到了一个示例,它从给定的 CGPoint 生成 CGRect ZoomRect 变量。
在 TouchsEnded 函数中,如果双击并且它们一直缩小,我想放大到我创建的 PDFUIView,就好像它们在双击的位置捏合中心一样。
因此,假设我将 UITouch 变量传递给我的函数,如果双击,该函数将使用 ZoomToRect。
我从在苹果网站上找到的以下功能开始:
http://developer.apple.com/iphone/library/documentation/WindowsViews/Conceptual/UIScrollView_pg/ZoomZoom/ZoomZoom.html http://developer.apple.com/iphone/library/documentation/WindowsViews/Conceptual/UIScrollView_pg/ZoomZoom/ZoomZoom.html
以下是我的 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 的位置,它会锚定到不同的位置。似乎中间有一个十字,它以某种方式反映了这些点,好像中间左边的任何地方都是负面反射,而中间右边的任何地方都是正面反射?
这看起来很复杂,难道不应该缩放到 UIView 能够绘制的矩形吗?
我进行了大量的研究来弄清楚如何创建高质量的 PDF,所以我假设使用 CALayer 可能会抛弃坐标系?但对于 UIScrollView 来说,它应该将其视为尺寸为 768x985 的视图。
这有点高级,请假设创建 ZoomRect 的代码都很好。 UIView 中的 CALayer 有更深层次的东西,而 UIScrollView 中......