UIScrollView -zoomToRect:animated:和视图之间的CGPoint转换

时间:2013-11-21 19:46:29

标签: ios iphone objective-c uiscrollview

我有一个UIScrollView A ,子视图 B ,(它本身是contentView D 的子视图A - 所以 B 具有子视图的scrollview A的contentView),我们称之为 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 zoomScale的值,因为我不知道是否乘以或除以该值。

1 个答案:

答案 0 :(得分:1)

问题更新后更新:

如果要以编程方式缩放和滚动滚动视图,以便子视图C填充整个滚动视图矩形(滚动视图边界),则需要在视图控制器中执行以下操作:

CGRect rectToZoom = [self.D convertRect:self.C.frame fromView:self.B];

[self.scrollView zoomToRect:rectToZoom animated:YES];

这假设您将视图D作为要缩放的视图返回:

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
    return self.D;
}

滚动视图的maximumZoomScale,contentSize和contentInset属性必须足够大,以允许滚动和缩放(检查:尝试手动执行您想要的操作并查看是否可行)。