所以我有一个主要的对象,有许多图像相关联。 一个图像也是一个对象。 假设你有一个集合视图控制器,并且在你拥有的控制器中 cellForItemAtIndexPath 以及基于主要的对象,如果它有与之相关的当前图像,我想设置为true。 但是我希望用户能够在任何时候“取消”当前单元格以取消与主要对象的关联。 我发现如果你设置“select为真” – 如果主要对象和cellForItemAtIndexPath图像之间有关系,取消select不再是一个选项。 在 didDeselectItemAtIndexPath 和 didSelectItemAtIndexPath 我testing一个日志,看看他们是否被称为。 如果一个单元格被设置为选中 – 下一个被调用,但如果我从来没有设置单元格在cellForItemAtIndexPath中select我可以select和取消select所有我想要的。 这是集合视图应该工作的预期方式吗? 我阅读文档,似乎没有谈到这是如此。 我解释文档意味着它工作的表格视图单元格的方式。 有一些明显的变化 这也显示控制器设置正确,并使用适当的代表方法….嗯
我试图达到以下效果: UICollectionView显示父types对象的单元格网格,例如相册。 当我点击这些项目中的一个时,我想将该元素滚动到屏幕的顶部,并从中打开一个像跳板一样的文件夹。 在该文件夹区域内,应显示另一个集合,包括详细信息,即该专辑的各个照片。 在剩余的“父”视图中点击再次closures该文件夹。 看到这个模式: 到目前为止,我所做的是定期收集相册的视图。 当我select一个,它滚动到选定的项目顶部,然后使用JWFolders在该地方打开一个空的文件夹。 一旦显示,我触发周围的UINavigationController推我的第二个视图控制器的细节项目。 那个被放下,所以用户看起来好像还是一样的。 这种方法有几个问题,我想知道如何更好地做到这一点: JWFolders截图并向上/向下animation的两半来实现开放效果。 这是可以的,但在iPad3上很慢,因为它移动了很多像素,而且iPad3的GPU还不能完成任务。 第二个视图需要像素完美匹配的第一个顶部。 这很可能会意外中断。 我对视图控制器转换的animation是有限的。 默认的UINavigationController从右侧推入并不合适。 我忽略了做一个交叉溶解,但仍然是非常不理想的。 我想指出如何以可维护的方式来处理这个问题,而不需要对框架devise要做的事情进行太多的创造性攻击。 我可能会在这里忽略一些显而易见的东西,所以我们对这个例子或者一般性的build议有所指导 更新: 我改变了一下方法。 现在我使用具有两个embedded式集合视图控制器的容器视图控制器。 一个用于“专辑”,另一个用于底部的“照片”部分。 在两者之间的中间使用UIImageView我可以得到三angular形向上完成。 从维护的angular度来看,这样做也很好,因为这样可以使两个集合完全分开处理,从而简化维护过程。 该应用程序使用自动布局,所以我可以通过修改约束来更改每个embedded视图所占用的空间量。 这比使用JWFolders的基于截图的方法快得多,并且在iPad3上也能很好地工作。 这几乎让我想去的地方。 剩下的一件事就是让开场animation正确。 我想同时滚动“专辑”collections集,以便点击的项目将显示在顶部,并使用指向“相册”单元格的三angular形展开照片collections集。 我可以以某种方式通过布局约束“连接”下部视图到该单元格,以便scrollToItemAtIndexPath:atScrollPosition:animated: call拖动下部视图打开?
我已经通过设置视图的图层属性看到了一些lagyness问题的修复 view.layer.shouldRasterize = YES; 在使用UICollectionView并准备单元格和设置propery时,我看到了性能上的巨大差异。 不知道是什么影响。 这将是很好的解释。 谢谢!
我在UICollectionView有两个部分。 我只想在UICollectionView显示节标题。 不在第0节。 所以我试图返回nil viewForSupplementaryElementOfKind : section == 0方法,并返回section == 1视图。 它崩溃,并显示下面的错误: Assertion failure in -[UICollectionView _createPreparedSupplementaryViewForElementOfKind:atIndexPath:withLayoutAttributes:applyAttributes]: 这里是我的补充视图的代码。 – (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath { UICollectionReusableView *sectionHeader = nil; if (kind == UICollectionElementKindSectionHeader && indexPath.section == 1) { sectionHeader = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:@"EventSectionHeader" forIndexPath:indexPath]; sectionHeader.layer.borderWidth = .5f; sectionHeader.layer.borderColor = [UIColor colorWithRed:221.0 / 255.0 […]
我们使用UICollectionView来显示覆盖整个屏幕的单元格(减去状态和导航栏)。 单元格大小从self.collectionView.bounds.size设置: – (void)viewWillAppear:(BOOL)animated { // // value isn't correct with the top bars until here // CGSize tmpSize = self.collectionView.bounds.size; _currentCellSize = CGSizeMake( (tmpSize.width), (tmpSize.height)); } – (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { return _currentCellSize; } 这为每个设备设置了正确的大小。 每个单元格被定义为没有插页,并且布局没有页眉或页脚。 但是,当我们从肖像旋转到风景时,我们得到以下“投诉”: the behavior of the UICollectionViewFlowLayout is not defined because: the item height must be less […]
作为一个testing,我做了一个布局,以垂直线显示单元格,另一个以水平布局显示单元格。 当我调用[collectionView setCollectionViewLayout:layout animated:YES]; 它在两个位置之间非常干净地animation。 现在我想要做的是在最终到达目的地之前,所有的视图都进行了一些旋转,扭曲和旋转(可能使用CAKeyframeAnimations),但是我找不到一个合适的位置来吸引它。 我尝试了UICollectionViewLayoutAttributes包含一个animation属性,然后设置这些animation重写我使用的UICollectionViewCell applyLayoutAttributes:方法。 这工作…除了布局过渡完成后才出现。 如果我想使用这个,我必须有布局不改变对象的当前位置,只有在它达到这个应用属性代码的一部分,这似乎很多工作… … – 或者,我可以UICollectionView并覆盖setCollectionViewLayout:animated: UICollectionView但是这也看起来像是很多状态来保持布局之间。 这两种select都不是正确的,因为有一种简单的方法可以在布局中增加/删除单元格。 我觉得应该有一些类似的布局之间的animation挂钩。 有谁知道最好的方法来获得我期望完成的?
我有一个UICollectionView与自定义的UICollectionViewFlowLayout。 它水平滚动,一次只显示一个项目(全高)。 我有pagingEnabled = YES,以便它坚持页面。 UICollectionView在特定的一天内显示照片。 我最初有button来改变一天+/- 1天,但我认为如果用户可以通过第一个或最后一个图像(超过预定的阈值)拉动收集视图来改变一天,那么将会是整洁的。 我使用UIScrollView委托方法实现了这个function,如果在集合视图中有两个或更多的项目,那么它工作的很好。 这很难描述,但是如果只有一个物品,它不允许我把物品拉过它的边界。 IE没有反弹。 我想要这样的行为,但是我需要先解决这个问题。 我在想,如果我删除了pagingEnabled = YES,并使用targetContentOffsetForProposedContentOffset:proposedContentOffset:withScrollingVelocity,我可能能够得到它的工作,但我真的很喜欢分页启用的清醒的行为。 (它们是互斥的)。 任何想法呢?
这与使用stream布局或自定义相关,但不同。 。 这是我想要做的一个例子: 我想知道如果我可以做一个UICollectionViewFlowLayout ,它的子类,或者如果我需要创build一个完全自定义的布局? 根据UICollectionView上的WWDC 2012video,看起来如果您使用垂直滚动的stream布局,则您的布局线是水平的,而如果您水平滚动,则布局线是垂直的。 我想水平滚动的集合视图中的水平布局线。 我的模型中也没有任何固有的部分 – 这只是一组项目。 我可以将它们分组成不同的部分,但是集合视图可以resize,所以可以适合页面的项目数量有时会发生变化,看起来每个项目所在的页面的select最好留给布局,而不是该模型如果我没有任何有意义的部分。 那么,我可以使用stream布局来做到这一点,还是我需要创build一个自定义的布局?
我正在使用UICollectionView显示多个相册的项目。 项目显示正常,但现在我想在第一部分上方显示标题。 要做到这一点,我添加了registerNib:forSupplementaryViewOfKind:withReuseIdentifier:我的init方法。 喜欢这个: [self.collectionView registerNib:[UINib nibWithNibName:@"AlbumHeader" bundle:nil] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:kAlbumHeaderIdentifier]; ( AlbumHeader Nib包含类AlbumHeader的视图,它是UICollectionView的子类。) 之后,我实现了collectionView:viewForSupplementaryElementOfKind:atIndexPath方法: – (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath { return [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:kAlbumHeaderIdentifier forIndexPath:indexPath]; } 现在它应该尝试加载标题视图,我想。 但它不,补充视图的方法不会被调用。 我错过了什么? 卡住了好几个小时,已经多次阅读了UICollectionView的文档,但似乎没有任何帮助。 有什么想法吗?
我在Storyboard中使用自定义的CollectionViewCell。 当我启动应用程序时,我收到以下消息: 无法将types为“UICollectionViewCell”的值转换为TestProject.CollectionViewCell。