gpt4 book ai didi

iphone - 水平循环 UIScrollView

转载 作者:行者123 更新时间:2023-12-03 20:47:17 25 4
gpt4 key购买 nike

我希望循环 UIScrollView,但不是以大多数 View 列表循环的方式,只是滚动一个 subview ,但无缝循环。

本质上,我正在尝试制作一个 map View ,我可以放大和缩小并不断滚动。

有人有什么建议吗?

最佳答案

不久前我正在解决同样类型的问题,并编写了一个解决方案的快速演示。我暂时不确定可能由许多图 block 构建的 map View 是否更容易管理还是更难管理。

https://github.com/jonah-carbonfive/WrappingScrollView

这就是我正在做的事情,以防代码中不清楚。

  1. 创建一个包含您想要显示的任何内容的单一 View 。我们将其称为“平铺 View ”。
  2. 以 UIScrollView 的内容 View 为中心显示平铺 View 。使内容 View 明显大于平铺 View (请参阅下文了解大了多少)。
  3. 创建图 block View 内容的图像。
  4. 创建包含此图像的 UIImageView“图 block ”,并将它们放置在图 block View 周围以填充 ScrollView 的内容 View 。这可能有很多 UIImageView,但它们共享单个图像,因此内存占用量还不错。
  5. 现在您有一个大 ScrollView ,它看起来至少将其内容包裹一次,但如果滚动得足够远,您仍然会碰到边缘。
  6. 在 ScrollView 的 -scrollViewDidScroll: 委托(delegate)方法中,检查平铺 View 是否已完全滚动到视线之外,如果是,则重新定位 ScrollView 的内容偏移量以重新定位内容 View ,以便平铺 View 返回在可见区域的中间。如果做得正确,用户永远不会注意到您从查看平铺 View 的图像跳回到平铺 View 本身。
  7. 但是等等!只有中央图 block View 才会真正响应触摸。毕竟它的所有其他副本都只是图像。我们可以通过覆盖 -hitTest:withEvent: 来解决这个问题,以重新定位图 block View ,以取代用户在调用 super 之前尝试触摸的任何 ImageView 。现在所有触摸都会到达图 block View 。
  8. 确保在每次重绘图 block View 时更新图 block View 的图像。

这有点疯狂,但它让我可以将任意交互式 UIViews 和 UIControls 放入一个容器中,并让它们从一侧包裹起来,然后回到另一侧。

<小时/>

老实说,这对您来说可能不是一个很好的解决方案。如果我知道我想要绘制一张可以包裹一个或多个维度的 map ,我会将 map 分成许多图 block 。检测某些容器 View 上的触摸,就像 UIScrollView 所做的那样,并在用户移动触摸时重新定位图 block 。当图 block 滚动到视线之外时将其移除,并重新使用它们来显示 map 上新可见的区域。在简单的情况下,您可能只需使用 map 图像的两个副本即可实现此目的。在复杂的情况下,您需要重新创建 UIScrollView 的大部分内容;缩放您显示的图 block ,并可能以不同的分辨率加载不同的图 block 集,以减少内存使用并在缩放时提高分辨率。

关于iphone - 水平循环 UIScrollView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4676234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com