每次您处于更深的缩放级别时,有没有办法重置您的缩放级别,以便您可以进行无限缩放?
我正在尝试创建一个 CATiledLayer,其中每个图块都有不同的颜色,当您放大图块时,您只会获得新的颜色,依此类推。
我不确定如何使用 CATiledLayer 来做到这一点,但 Matt Neuburg 所著的 Programming IOS 4 书中包含一个“详细缩放”部分,其中描述了如何使用 UIScrollView 执行类似的操作。
UIScrollView 提供对放大到其内容的支持,但它只是通过缩放变换放大其内容的未缩放渲染,而不是在更高的 zoomScale 处重新渲染其内容。因此,为了提供实际显示更多细节的缩放,您需要添加一些逻辑。
基本上,这本书建议您实现 scrollViewDidEndZooming:withView:atScale: 以便它 (1) 将 UIScrollView 的 zoomScale 重置为其默认值 1.0,并且 (2) 删除内容视图并提供具有所需真实缩放比例的内容的新视图. 您需要引入自己的 ivar 来手动跟踪这个真实的比例。结果是,当您进一步放大并且真实比例不断增加时,UIScrollView 会容纳一系列不同的视图,并在其范围内不断循环其自己的 zoomScale,从 1.0 到最大值,然后重置为 1.0,然后从 1.0 到最大值等等。这本书给出了一个骨架示例(第 1 版中的第 506 页,该书的第二次印刷)。
您将如何使用它进行无限缩放?如果您不需要真正的无限缩放,您可以在非常大的范围内执行上述操作以获得真实比例。
如果您想要真正的无限缩放,则无法使用有限有界变量来跟踪缩放级别以获取真实比例。相反,您将修改 scrollViewDidEndZooming:withView:atScale: 以便它 (1) 将 UIScrollView 的 zoomScale 重置为其默认值 1.0,(1) 删除内容视图并提供一个新视图,其中新视图位于新的 zoomScale 1.0 在视觉上与在旧的 zoomLevel 上移除的视图相同。以这种方式,当用户使用捏合手势不断放大时,UIScrollView 会反复从 1.0 循环到最大,在用户的手势之间在每个循环中无形地替换底层视图。