gpt4 book ai didi

ios - 我可以从UICollectionView中“取出”或“撕下”一个单元格吗?

转载 作者:行者123 更新时间:2023-11-29 12:49:22 39 4
gpt4 key购买 nike

注意-可以使用UIViewControllerAnimatedTransitioning
https://developer.apple.com/library/ios/documentation/uikit/reference/UIViewControllerAnimatedTransitioning_Protocol/Reference/Reference.html
在这里相关。
注意-我刚刚意识到新的iOS7“滑动”手势就是这个概念
这里有一些答案:
The UICollectionView "swipe-away" in iOS7 app manager?

想象一下,您的iPad有一个垂直的UICollectionView(“bigView”),其中包含10个单元格,每个单元格约为400x400。假设bigView在屏幕的右半边。
我想做这个:
单元格编号3可能被单击。
该单元格从集合视图移开(例如,在屏幕左侧)。 TBC移到UICollectionView的边界之外。理想情况下,它成为普通的UIView(例如)。
实际上,我想:
(1)消灭其他9个细胞
(2)彻底销毁UICollectionView
(3)实际上,将一个单元格#3转换为(我猜)一个UIView
我从那里拿走!
能做到吗?
(a)您可以“转换” UICollectionViewCell到UIView (它是否具有可以“删除”的UIView胆量?)
(b)您是否可以(也许)销毁所有其他单元,而将UICollectionView保留为实际上仅是一个单元(也许移动“整体”)...
(c)从UICollectionView是否还有其他类型的“撕除”机制

经过这么多次的工作,这几乎是最简单的基本解决方案。
您将拥有一个实际上是集合视图的类,

@interface BouncyItems : UICollectionViewController
在该类中,您将拥有didSelectItemAtIndexPath:或类似的内容:
在这里,您可以轻松到达所讨论的单元。
-(void)collectionView:(UICollectionView *)cv
didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
NSInteger thisRow = indexPath.row;
NSString *thatName = yourData.stuff[thisRow][@"nameField"];
YourCellClass *cell = [cv cellForItemAtIndexPath:indexPath];

NSLog(@"Yo, peeling off ....... %@ %@", theName);

YourScene *parent = (YourScene *)self.parentViewController;
[parent peelOff:cell.holder];
}
但更重要的是,您将拥有一个实际的场景,该场景具有一个容器视图,即容器视图。
因此,在示例中,“YourScene”是UIViewController,它确实具有一些容器视图。这些容器视图之一确实是有问题的集合视图。
@interface YourScene:UIViewController
@property (nonatomic, strong) IBOutlet UIView *bouncyItemsContainer;
-(void)peelOff:(UIView *)peelMe;
@end
请注意,在情节提要中,查看您的BouncyItems,您会将连接从其拖回到“bouncyItemsContainer”
(与将“YourScene”中的按钮连接到相关IBOutlet项的方式没有什么不同。)
因此,查看didSelectItemAtIndexPath中的代码,就很简单,
    YourScene *parent = (YourScene *)self.parentViewController;
[parent peelOff:cell.holder];
以下是“.holder” ..的解释。
现在例行剥离是什么?令人惊讶的是,这很简单。
秘密之处在于convertPoint:代码行...
-(void)peelOff:(UIView *)peelMe
{
CGPoint oldCenter = [self.view
convertPoint:peel.center
fromView:peel.superview];
[self.view addSubview:peelMe];
peelMe.center = oldCenter;
[self.bouncyItemsContainer exitLeft];
}
{回想起 addSubview:可以很方便地从旧的 super 视图中删除视图,因此它只需一行代码即可为您完成所有操作。}
就是这样-前三行代​​码已从容器视图中删除了一个单元peelMe。现在,它只是正常场景YourScene的一部分。
接下来,只需“摆脱”收集视图。在我的示例中,exitLeft只是将其动画设置为离开屏幕左侧。
因此,这很完美–单击一个单元格;其余所有集合视图都会在屏幕上进行动画处理(您可以在此处进行任何操作,让它们“飞起来”,面朝外,翻滚-随便什么),然后剩下一个选定的单元格。由于“神奇的” convertPoint代码行,所有内容均正确保留在原位。
最后,所有单元格都必须有一个“.holder”,即.....

一个UIView将所有内容保存在单元格中;那就是你要剥离的东西。 (这是唯一可行的解​​决方案,请不要取出单元格的底层.contentView。)您可以仔细安排白色/透明等背景,以便在场景中四处飞行时一切都能“正常”运行。
所以,仅此而已。
您现在拥有(1)摆脱了集合视图,并且(2)YourScene拥有作为单元的东西。
因此,在peelOff中:您将传递.holder UIVIew,并且可能还会传递一些数据,例如“用户选择这所房子来查看内部装修”,或者您的上下文是什么。
最后,在原始问题中,它提到然后将已剥皮的视图移动到YourScene上的某个位置。当然,无论是否想要动画,都可以在peelOff:中进行。
希望能帮助到你。

最佳答案

我已经按照这些原则做了一些事情。我已经实现了在集合视图周围以及各节之间拖动单元格。我还需要一个“外部目标”到集合视图以将单元格拖到上面。我只是在collectionView的图层上关闭了masksToBounds,就可以将我的假浮动单元格(代表真实的隐藏单元格)拖到集合视图的范围之外。

无论如何,我认为基本上隐藏您示例中未“聚焦”的单元格,并根据需要为聚焦的单元格动画化要容易得多。

考虑在您的集合视图布局上实现- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath。您既可以中继出collectionView来移动/调整焦点单元的大小,也可以将“被破坏”单元的框架设置为屏幕外,较小或进行其他修改。

您还可以为这些布局更改设置动画,甚至在布局之间移动,这可以实现非常漂亮的过渡。

没有理由在collectionView中的一个单元格不能非常大,并且框架与其他所有单元格都不一样。如果要执行此操作,则可以将正常的单元格保留在一个部分中,而将聚焦的单元格保留为另一个单元格中的唯一单元格(因为在部分之间移动单元格很简单)。然后,使用上述方法,我可以更轻松地为单元格的整体布局设置主题时间,因为我可以按节引用这些项。

关于ios - 我可以从UICollectionView中“取出”或“撕下”一个单元格吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22793107/

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