【发布时间】:2013-11-21 19:46:29
【问题描述】:
我有一个 UIScrollView A 和一个子视图 B,(它本身是 @987654322 的 contentView D 的子视图@ -- 所以 B 是 NOT 滚动视图的 contentView A) 有一个子视图,我们称之为 C。
+------------------------+
| A |
| |
| +-------------------+ |
| |D (=contentView) | |
| | +-----------+ | |
| | | B | | |
| | | +--+ | | |
| | | |C | | | |
| | | +--+ | | |
| | +-----------+ | |
| +-------------------+ |
+------------------------+
我希望 scrollView 能够精确缩放,以便 C 填满我的 iPhone 屏幕,或者至少尽可能大地显示给我。
我无法理解缩放之前滚动视图的zoomScale 的方式(假设我在滚动视图已经放大并且缩放比例为 2.45 时进行放大)。
那么第一个问题是,zoomScale 会影响 UIScrollView 放大到的矩形吗?
我的第二个问题是关于 CGPoint 转换的。 iOS 有一些内置函数可以在视图之间转换 CGPoints/CGRects,但我根本无法从给定的引用中产生任何有成效的东西。
这是我打算做的:
1) 将C的原点转换为A的坐标系:
CGPoint originConvertedToAsCoordinateSystem = [self convertPoint:C.frame.origin toView:A];
2) 缩放到 C 给定原点的矩形:
//shortened for the purpose of readability
CGPoint p = originConvertedToAsCoordinateSystem;
CGRect zoomRect = CGRectMake(p.x,p.y,C.frame.size.width,C.frame.size.height);
[A zoomToRect:zoomRect animated:YES];
在我给定的示例中,我忽略了 A'szoomScale 的值,因为我真的不知道是乘还是除该值。
【问题讨论】:
-
不确定我是否理解您的问题。请注意:要缩放的矩形必须在内容视图的坐标空间中(我假设它是子视图 B),因此您不需要转换 C.frame,只需按原样使用即可。
-
@yurish 我只想让滚动视图
A缩放到视图的原点C。我不能“只使用C的框架”,因为它的框架位于B的坐标系中。所以我必须将C的原点转换为A的坐标空间。 -
抱歉,但是“缩放到原点”(这是点,而不是矩形)对我来说没有多大意义。你也读过 zoomToRect 方法的描述吗?它明确指出“矩形应位于 viewForZoomingInScrollView: 返回的视图的坐标空间中”。您的情况下的视图必须是 B,而不是您尝试做的滚动视图本身。无论如何,请参阅答案。
-
@yurish 哦,对不起,你是对的...但问题是,
B真的不是内容视图,而是内容视图的子视图... -
@yurish 我的
contentView(我在viewForZoomingInScrollView中返回)是一个视图D,B是它的子视图。我更新了我的问题...
标签: ios iphone objective-c uiscrollview