我们的最新项目中有一个关卡地图视图。它包括作为 UICollectionViewCells 和各种 UICollectionReusableViews 的关卡标记,用于有趣的装饰。
我们希望能够放大/缩小(这是一张大地图)。我曾希望我可以利用内部 UIScrollView 来做到这一点,但是,你不能缩放自己......只有一个子视图。
在我缩放时,除了单独缩放和重新定位每个元素之外,还有其他方法吗?感觉它应该是一件常见的事情,因此可以使用更“内置”的解决方案。
我们的最新项目中有一个关卡地图视图。它包括作为 UICollectionViewCells 和各种 UICollectionReusableViews 的关卡标记,用于有趣的装饰。
我们希望能够放大/缩小(这是一张大地图)。我曾希望我可以利用内部 UIScrollView 来做到这一点,但是,你不能缩放自己......只有一个子视图。
在我缩放时,除了单独缩放和重新定位每个元素之外,还有其他方法吗?感觉它应该是一件常见的事情,因此可以使用更“内置”的解决方案。
您是否考虑过将 UICollectionView 嵌入到 UIScrollView 中?这听起来有点简单,但我遇到了类似的问题,尝试了这个,是的,它有效。
您必须将 UICollectionView 的框架设置为其自己的上下文大小(从您的 UICollectionViewLayout 调用 collectionViewContentSize),因此 collectionView 不再滚动。它也禁用了所有单元重用的东西,所以这可能不是你想要的。但另一方面,在某些用例中,预先渲染所有视图比每次滚动移动时都必须调用 dequeueReusableCellWithReuseIdentifier: 更便宜、更快。也许您的地图应用程序可以从类似的东西中受益。
我确信可能有更复杂的解决方案,其中外部滚动视图仅进行缩放,而集合视图负责滚动。也许继承 UIScrollView 并为 panGestureRecognizer 返回 nil 可以工作,但这只是一个猜测。