- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试做一个类似的动画,当你选择一个时,它会制作这些 UICollectionViewCell。我的意思是他们所做的事情就好像他们起床了,但是 Nose 在想怎么才能得到它。我清楚应该在方法中完成:
CollectionView ( CollectionView : UICollectionView , didSelectItemAtIndexPath indexPath : NSIndexPath )
我留下了一个 YouTube 视频,它展示了我所说的话 https://www.youtube.com/watch?v=gFWiyOERVBg
谢谢
最佳答案
didSelectItemAtIndexPath 可以用作触发器,但与此无关。
如果我要尝试重现这一点,我会采用以下方法:
首先, Collection View 中的所有单元格都会受到影响,检索可见项数组并对每个项应用转换。
变换看起来好像分两个阶段进行,首先是 y 轴旋转变换,其值应用于 .m34 处的变换矩阵以改变视角。其次,使用足够大的负 x 值将单元格移出屏幕。将这些变换放在一个基本动画组中,我怀疑您会非常接近所需的效果。
最后的观察是这似乎是一个过渡,因此您可以将其作为 UIViewControllerAnimation 的一部分来实现。
编辑
我今天早上有时间,所以我为您整理了一些代码。
仔细观察动画后,我注意到向左移动实际上是旋转动画的一部分, anchor 在 x 轴上设置为 0。所以实际上我们所需要的只是一个旋转和淡入淡出的动画——全部以 x = 0 为中心。
要实现这一点,最简单的方法是为集合列表中的每个单元格添加一个 CALayer,并在单元格“移植”到新层后为添加的层设置动画。
- (void)processVisibleItems{
NSArray *visibleItems = [self.collectionView indexPathsForVisibleItems];
for (NSIndexPath *p in visibleItems) {
// create a layer which will contain the cell for each of the visibleItems
CALayer *containerLayer = [CALayer layer];
containerLayer.frame = self.collectionView.layer.bounds;
containerLayer.backgroundColor = [UIColor clearColor].CGColor;
// we need to change the anchor point which will offset the layer - adjust accordingly
CGRect containerFrame = containerLayer.frame;
containerFrame.origin.x -= containerLayer.frame.size.width/2;
containerLayer.frame = containerFrame;
containerLayer.anchorPoint = CGPointMake(0.0f, 0.5f);
[self.collectionView.layer addSublayer:containerLayer];
//add the cell to the new layer - change MyCollectionViewCell to your cell's class
MyCollectionViewCell *cell = (MyCollectionViewCell*)[self.collectionView cellForItemAtIndexPath:p];
cell.frame = [containerLayer convertRect:cell.frame fromLayer:cell.superview.layer];
[containerLayer addSublayer:cell.layer];
//add the animation to the layer
[self addAnimationForLayer:containerLayer];
}
}
- (void)addAnimationForLayer:(CALayer*)layerToAnimate{
// fade-out animation
CABasicAnimation *fadeOutAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
[fadeOutAnimation setToValue:@0.0];
//rotation Animation
CABasicAnimation *rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform"];
CATransform3D tfm = CATransform3DMakeRotation((65.0f * M_PI) / 180.0f, 0.0f, -1.0f, 0.0f);
//add perspective - change to your liking
tfm.m14 = -0.002f;
rotationAnimation.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity];
rotationAnimation.toValue = [NSValue valueWithCATransform3D:tfm];
//group the animations and add to the new layer
CAAnimationGroup *group = [CAAnimationGroup animation];
group.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
group.fillMode = kCAFillModeForwards;
group.removedOnCompletion = NO;
group.duration = 0.35f;
[group setAnimations:@[rotationAnimation, fadeOutAnimation]];
[layerToAnimate addAnimation:group forKey:@"rotateAndFadeAnimation"];
}
//To trigger on cell click simply call [self processVisibleItems] in didSelectItemAtIndexPath
注意-
要使它看起来与视频中的动画完全一样,您需要更改几处:
仅此而已......尽情享受吧!
关于ios - 点击时如何在 UICollectionViewCell 中制作此动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36282996/
堆栈:Mac OS 10.15.6,Xcode 版本 12.0 (12A7209) 我有一个自行调整大小的收集单元。我覆盖 preferredLayoutAttributesFitting获得自我调整
我有一个 Storyboard,它是在 Xcode 6 中创建的,带有 Collection View ,并且单元格具有不同的大小类变化,例如不同的字体大小......( Storyboard中创建的
我有一个 UICollectionView,只有 1 个部分,该部分中有许多单元格。我启用了拖放行为(使用长按手势识别器,因为 UICollectionView 位于通用 UIViewControll
按照我的老问题here : How to add UIView inside a UITableViewCell Programmatically? 我想通过在这些 collectionViewCel
我将 UICollectionViewCell 与父 UICollectionViewCell 中的按钮一起使用: protocol DayCellDelegate { func button
例如,我有 10 个单元格的 UICollectionView。我想为选定的单元格添加边框,稍后,在选择另一个单元格时,想要删除以前的边框并为新的选定单元格添加边框。 我怎样才能做到这一点? 我已经试
我有一个 UICollectionViewCell(比如 UICollectionViewCell 1),单元格内有一个按钮和 UITextfields。连接到 (ViewController 1)
我在单个 UICollectionViewCell 内有 (3) UITextViews、(1) UITextField 和 (1) UILabel >。当文本换行到第二行时,在符合 UITextVi
我对 TableVieCell 中的 collectionView 有疑问。当我点击 collectionCell 时,didSelectItemAt 不会被调用。我在 collectionCell
我最近在我的 Storyboard中添加了一个 UICollectionView,它当前被另一个 View 插入 View ,这似乎工作正常但是,使用 Storyboard编辑器我将 View 设置为
我想在 UICollectionViewCell 上开始一些动画当用户点击一个单元格时。我的想法是在 didSelectItemAtIndexPath 中选择相应的单元格并触发动画。但是,这不起作用:
我可以通过使用手势识别器拖动它并简化新的 iOS 9 对重新排序的支持来重新排序 iOS 9 上的 UICollectionViewCells。 public func beginInteractiv
我正在开发一个应用程序,其中我在 UICollectionView 中实现了编辑模式。我正在尝试实现如下所示的内容: 当我单击编辑按钮时,相机按钮和眼睛按钮应隐藏,删除和重命名按钮应如下所示: 编辑后
我希望所有单元格之间以及屏幕边框和最近的单元格之间的间距相等。基本上是这样的。内部和周围的间距相等。 我设法通过设置这样的值在界面生成器中测试这一点。我将单元格大小设置为 110,最小间距设置为 0,
我已经设置了一个 UICollectionView,如下所示。我正在尝试设置自定义单元格高度,以便该集合在必须滚动之前适合屏幕上的 3 个单元格。但是,这种定制工作不起作用或似乎被忽略了。有谁知道我做
我在不使用 Storyboard的情况下以编程方式创建了 UICollectionView 和 UICollectionViewCell,但是发生了一些事情,我无法理解为什么。 BKPhotoCell
我正在寻找制作图片库。我希望我的图像全屏显示,但不确定这如何与自动布局一起使用。我知道有一种方法可以返回单元格的大小,但不知道我是否应该只获取屏幕大小并返回它,或者是否有使用自动布局的方法。 最佳答案
我有一个问题, 我有一个简单的 UICollectionView,其中包含从 Flickr 加载图像的静态 200 个单元格。 我的 CellForItemAtIndexPath 看起来像这样: -
以下代码是一个非常简单的程序,用于在 UICollectionView 中显示 1-10000 之间的数字。 .它在不滚动的情况下正确显示,但是如果您向下滚动并向后滚动 Collection View
这个问题在这里已经有了答案: UICollectionViewLayout Not working with UIImage in Swift 5 and Xcode 11 (2 个答案) 关闭 2
我是一名优秀的程序员,十分优秀!