我的应用程序有一个子视图的UIScrollView。子视图是一个扩展的UIView,它使用drawLayer事件中的图层将PDF页面打印到自己。UIScrollView zoomToRect没有缩放到给定矩形(从UITouch CGPoint创建)
使用内置夹捏变焦效果很好。 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];
红色框显示了触摸点在中心死亡。
请注意:我从我的电脑上写下了这个消息,我记得在我的Mac上把它分成了两部分,所以我们假设这会在中间点触摸一个矩形。如果UIView退出中心但放大到正确的位置,那将会很好。
但是,会发生什么情况是,当它执行zoomToRect时,似乎使用放大结果左上角的缩放右下角的右下角。
此外,我注意到,根据我点击UIScrollView的位置,它锚定到不同的点。几乎看起来中间有一个十字架,它以某种方式反映这些点,好像中间的任何一个地方都是负面反射,而中间的任何一个地方都是正面的反射?
这似乎很复杂,不应该只是放大到UIView能够绘制的矩形?
我用了大量的研究来弄清楚如何创建一个高质量的PDF,所以我假设使用CALayer可能会丢掉坐标系?但对于UIScrollView,它应该将其视为768x985尺寸的视图。
这是一种先进的,请假设创建zoomRect的代码都很好。在UIView中的CALayer有一些东西在UIScrollView中......
末评论,但我无法抗拒;如果这是有效的:这是纯粹的运气。乘中心的坐标没有意义。如果您需要在中心上执行翻译,请改为添加一个值。但最有可能的是,该中心是不正确的,因为它是从错误的坐标系引用计算出来的(例如,从错误的视图) – jyavenard 2011-09-12 08:55:10