菜鸟教程小白 发表于 2022-12-12 16:39:14

ios - UIScrollView -zoomToRect :animated: and CGPoint conversion between views


                                            <p><p>我有一个 <code>UIScrollView</code> <strong>A</strong> 和一个 subview<strong>B</strong>,(它本身就是 contentView <strong>D</strong> 的 subview <code>A</code> 的 strong> - 所以 <strong>B</strong> 是 <strong>NOT</strong>ScrollView<code>A</code>) 的 contentView,它有一个 subview ,我们称之为<strong>C</strong>。 </p>

<pre><code>+------------------------+
| A                      |
|                        |
|+-------------------+ |
||D (=contentView)   | |
||+-----------+    | |
||| B         |    | |
|||   +--+    |    | |
|||   |C |    |    | |
|||   +--+    |    | |
||+-----------+    | |
|+-------------------+ |
+------------------------+
</code></pre>

<p>我希望 scrollView 能够精确缩放,以便 C 填满我的 iPhone 屏幕,或者至少尽可能大地向我显示它。
我无法理解缩放之前 ScrollView 的 <code>zoomScale</code> 是如何进行的(假设我在 ScrollView 已经放大并且 zoomScale 为 2.45 时放大)。
那么第一个问题是,zoomScale 会影响 UIScrollView 放大到的矩形吗?</p>

<p>我的第二个问题是关于 CGPoint 转换的。 iOS 有一些内置函数可以在 View 之间转换 CGPoints/CGRects,但我根本无法从给定的引用中产生任何有效的东西。</p>

<p>这是我打算做的:</p>

<p>1) 将<strong>C</strong>的原点转换为<strong>A</strong>的坐标系:</p>

<pre><code>CGPoint originConvertedToAsCoordinateSystem = ;
</code></pre>

<p>2) 缩放到 <strong>C</strong> 给定原点的矩形:</p>

<pre><code>//shortened for the purpose of readability
CGPoint p = originConvertedToAsCoordinateSystem;

CGRect zoomRect = CGRectMake(p.x,p.y,C.frame.size.width,C.frame.size.height);
;
</code></pre>

<p>在我给定的示例中,我忽略了 <strong>A</strong> 的<code>zoomScale</code> 的值,因为我真的不知道是乘还是除该值。 </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p><strong>问题更新后更新:</strong></p>

<p>如果您想以编程方式缩放和滚动 ScrollView ,以便 subviewC 填充整个 ScrollView 矩形( ScrollView 边界),您需要在 ViewController 中执行以下操作:</p>

<pre><code>CGRect rectToZoom = ;

;
</code></pre>

<p>这是假设您返回 ViewD 作为要缩放的 View :</p>

<pre><code>- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
    return self.D;
}
</code></pre>

<p> ScrollView 的maximumZoomScale、contentSize和contentInset属性必须足够大以允许滚动和缩放(检查:尝试手动执行您想要的操作,看看是否可行)。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - UIScrollView -zoomToRect :animated: and CGPoint conversion between views,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/20130474/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/20130474/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - UIScrollView -zoomToRect :animated: and CGPoint conversion between views