相关疑难解决方法(0)

将缩放缩放添加到UICollectionView

介绍

我将描述我想要实现的效果,然后我将详细介绍我目前是如何实现这一点以及它的行为有什么问题.我还会提到我看过的另一种方法,但根本无法完成工作.

最相关的代码内嵌在问题的底部,以便快速访问.您可以下载源代码的zip或在BitBucket上将项目作为Mercurial Repository获取.该项目现在包含以下答案的修复程序.如果你想要最初提供的破碎版本,它会被标记为"initial-buggy-version"

该项目是概念/尖峰的最小证明,用于评估效果是否可行,因此它非常轻巧简单!

期望的效果

该应用程序将显示大量离散的信息行,形成一个垂直表.该表将由用户垂直滚动.这是a的标准行为UITableView,你也可以使用它UICollectionView.但是,应用程序还必须支持缩放缩放.当你在桌子上捏缩放时,所有的线条应该挤压在一起.当你伸展时,所有的线都应该分开.

在我的概念证明中,单个细胞没有调整大小,它们只是重新定位在一起或更远.这是故意的:我认为验证这个想法的可行性并不重要.

这是屏幕抓取,显示当前应用程序看起来如何缩小和放大:

放大图像 缩小图像

目前的实施

我正在使用UICollectionView自定义UICollectionViewLayout子类.布局将UICollectionViewCells一个漂亮的摇摆正弦波放在屏幕中间.每个UICollectionViewCell仅仅是一个容器UILabel持有indexPath行.

UICollectionViewLayout子类具有参数来设置每个单元之间的垂直间距它描述到UICollectionView,调整这允许表被压扁或如所期望垂直拉伸.

我的UICollectionViewController子类有一个UIPinchGestureRecognizer.当识别器检测到比例变化时,相应地UICollectionView改变布局中的垂直单元间距.

在没有进一步考虑的情况下,缩放将从内容的顶部发生,而不是围绕触摸手势的中心发生.该UICollectionViewcontentOffset属性捏提供此功能时调整.

手势识别器还需要适应挤压时发生的拖动.这也是通过改变UICollectionView's 来处理的contentOffset.一些附加代码允许触摸手势的中心点随着手指被添加到手势或从手势移除而改变.

请注意UICollectionView,作为UIScrollView子类,它有自己的UIPanGestureRecognizerUIPinchGestureRecogniser我添加的交互.我不确定这是否会导致问题.

我添加了代码以UICollectionView在我的捏合手势期间禁用内置滚动,但这似乎没有太大区别.我试图gestureRecognizer:shouldRequireFailureOfGestureRecognizer:使我UIPinchGestureRecognizer的内置失败UIPanGestureRecognizer,但这似乎停止我的捏识别器工作.我不知道这是不是我是傻瓜,还是iOS中的错误.

如前所述,当前的UICollectionViewCells未调整大小.他们只是重新定位.这是故意的.我认为验证这个概念并不重要. …

ios pinchzoom uipinchgesturerecognizer uicollectionview uicollectionviewlayout

31
推荐指数
1
解决办法
1万
查看次数

正确缩放包含许多子视图的UIScrollView

我创建了一个可缩放的UIScrollView并为其添加了100个子视图(平铺).视图向左和向右滚动.但是,我想允许缩放.

为此,我读到我的代表需要实现:

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
    return ???;
}
Run Code Online (Sandbox Code Playgroud)

我见过只有一个子视图可以缩放的例子,所以他们在那个方法中返回那个子视图.然而,就我而言,我还有更多.缩放的正确方法是什么?

我尝试创建另一个UIView并将100个子视图添加到那个.然后在上面的方法中返回一个视图,但是我不工作(它缩放但是一旦它停止,它就不再是交互式的).

iphone zoom objective-c uiscrollview

19
推荐指数
1
解决办法
2万
查看次数

使UICollectionView可缩放?

有没有任何方法可以制作UICollectionView zoomable,即当你捏时,所有细胞都可以放大和缩小.
我可以UIScrollView通过返回唯一subviewUIScrollViewfrom delegate方法 来实现它

- (UIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView
Run Code Online (Sandbox Code Playgroud)

既然UICollectionView有点UIScrollView,有没有办法或解决这个问题呢?是否UICollectionView有一个包含所有单元格的直接子视图?
谢谢

ios ios6 uicollectionview

12
推荐指数
1
解决办法
1万
查看次数

使用iOS 7 API进行UICollectionView交互式布局转换

我正在尝试处理新的iOS 7 API,它允许交互式动画视图控制器转换,包括UICollectionViewLayouts 之间的转换.

我已经从WWDC 2013"iOS-CollectionViewTransition"中获取并修改了示例代码,可在此处找到:https://github.com/timarnold/UICollectionView-Transition-Demo

原始演示在我找到它时未处于工作状态,可通过Apple Developer帐户访问,网址为:https://developer.apple.com/downloads/index.action?name = WWDC%202020

我的应用程序版本提供了一个包含两个布局的集合视图,两个布局都UICollectionViewFlowLayout具有不同的属性.

在第一个布局中点击一个单元格正确地动画到第二个,包括,至关重要的是,在新布局中滚动到的项目.起初我对新集合视图如何知道设置其内容偏移以使适当的单元格可见感到困惑,但我了解到它基于selected呈现集合视图的属性来做到这一点.

捏在某个项目中的第一个布局为动画,使用UICollectionViewTransitionLayout,UIViewControllerAnimatedTransitioningUIViewControllerInteractiveTransitioning,新的布局,以及.这样可以工作,但是在新布局或过渡布局中,压缩单元格不会滚动到该单元格.

我已经尝试selected在不同位置上的pinched-on单元格上设置属性(尝试模仿在点击某个项目时所描述的行为以推动新的视图控制器),但无济于事.

有关如何解决这个问题的任何想法?

iphone cocoa-touch ios uicollectionview uicollectionviewlayout

10
推荐指数
1
解决办法
2万
查看次数

缩放整个UICollectionView

我有一个iPad应用程序,我正在使用UICollectionView,每个UICollectionViewCell只包含一个UIImage.目前我每页显示每9个UIImages(3行*3列),我有几页.

我想使用Pinch Gesture缩放整个UICollectionView来增加/减少每页显示的行数/列数,最好是在Pinch手势期间获得漂亮的缩放动画!

目前,我在我的UICollectionView上添加了一个Pinch Gesture.我抓住Pinch Gesture事件使用比例因子计算行数/列数,如果它已经改变,那么我使用以下方法更新完整的UICollectionView:

[_theCollectionView performBatchUpdates:^{
     [_theCollectionView deleteSections:[NSIndexSet indexSetWithIndex:0]];
     [_theCollectionView insertSections:[NSIndexSet indexSetWithIndex:0]];
 } completion:nil];
Run Code Online (Sandbox Code Playgroud)

它有效,但在过渡期间我没有平滑的动画.

任何的想法?UICollectionView继承自UIScrollView,是否有可能重用UIScrollView Pinch手势功能来实现我的目标?

zoom uiscrollview ios uicollectionview

8
推荐指数
2
解决办法
1万
查看次数