- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有子类 UICollectionViewFlow 布局的 Collection View 。
我想要的效果是旋转(透视,圆形 y 轴)和运动缩放。
我的 Collection View 设置为分页模式,水平滚动,每个单元格都有全屏,即它们的框架等于 Collection View 的边界。每个单元格内部都有一个表格 View 。
问题是我的行为很奇怪。当前在屏幕上的单元格内的表格很好。当我平移到另一个单元格时,问题就出现了。单元格内的表格似乎完全错误!它只填满了单元格的一半,即使单元格要大得多。在界面构建器中,我将表格设置为将其边缘粘贴到其 super View (单元格)边缘(自动布局)。
一段时间后,我发现 [cell layoutsubviews] 仅在 View 实例化后被调用一次。由于我在下面的代码中直接设置 UICollectionViewLayoutAttributes 与旋转, TableView 是否可以在考虑初始旋转的情况下进行布局( super View 的框架由于严重的透视旋转而缩小)并且因为 [cell layoutsubiews] 永远不会再次调用它只是保持这种方式?
第二个奇怪的地方是布局的回调没有意义。
Collection View :didEndDisplayingCell:forItemAtIndexPath:
例如,告诉我索引路径处的 View 已停止显示,甚至在它出现在屏幕上之前!
有人可以尝试这种布局,也许可以告诉我我做错了什么?
-(BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds
{
return YES;
}
-(NSArray*)layoutAttributesForElementsInRect:(CGRect)rect
{
NSArray* array = [super layoutAttributesForElementsInRect:rect];
CGRect visibleRect;
visibleRect.origin = self.collectionView.contentOffset;
visibleRect.size = self.collectionView.bounds.size;
for (UICollectionViewLayoutAttributes* attributes in array)
{
if (CGRectIntersectsRect(visibleRect, attributes.frame) &&
ABS(CGRectGetMidX(visibleRect) - attributes.center.x) <= self.collectionView.frame.size.width)
{
CGFloat distance = CGRectGetMidX(visibleRect) - attributes.center.x;
CGFloat absoluteDistance = ABS(distance);
CGFloat angle = [self normalizeFromMin:0
fromMax:self.collectionView.frame.size.width
toMin:0
toMax:90
value:absoluteDistance];
CGFloat scale = [self normalizeFromMin:0
fromMax:self.collectionView.frame.size.width
toMin:0.7
toMax:1
value:absoluteDistance];
CATransform3D transform = CATransform3DIdentity;
transform.m34 = 1.0 / -1800;
if(distance > 0)
{
transform = CATransform3DRotate(transform, radians(angle), 0.0, 1.0, 0.0);
}
else
{
transform = CATransform3DRotate(transform, -radians(angle), 0.0, 1.0, 0.0);
}
transform = CATransform3DScale(transform, 1.0 - scale, 1.0 - scale, 0.0);
attributes.transform3D = transform;
attributes.alpha = 1.0;
if(distance == 0)
{
attributes.zIndex = 1;
attributes.transform3D = CATransform3DIdentity;
}
else
{
attributes.zIndex = 0;
}
}
}
return array;
}
-(CGFloat)normalizeFromMin:(CGFloat)fromMin
fromMax:(CGFloat)fromMax
toMin:(CGFloat)toMin
toMax:(CGFloat)toMax
value:(CGFloat)toNormalize
{
CGFloat toBeDivided = toMin + (toNormalize - fromMin) * (toMax - toMin);
CGFloat result = toBeDivided / (fromMax - fromMin);
return result;
}
attributes.frame = attributes.frame
最佳答案
部分修复:
- (void)scrollViewDidScroll:(UIScrollView *)aScrollView
{
CGRect visibleRect;
visibleRect.origin = self.collectionView.contentOffset;
visibleRect.size = self.collectionView.bounds.size;
NSArray *paths = [self.collectionView indexPathsForVisibleItems];
[paths enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
UICollectionViewCell *cell =b[self.collectionView cellForItemAtIndexPath:obj];
[cell.contentView.subviews[0] setFrame:cell.contentView.bounds];
}];
}
关于ios - 自定义 UICollectionViewFlowLayout 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15213474/
我正在尝试创建一个具有如下用户配置文件的应用程序(第一张图片):https://dribbble.com/shots/1642506-Messaging-app-Viber/attachments/2
我有一个带有流布局的垂直滚动 Collection View 。我已经对布局对象进行了子类化,以便将元素在每一行的左侧对齐(使用从这里和那里借来的代码),并将节标题放在每个节的左边距(插图)上(而不是
给定一个具有流式布局的 UICollectionView,计算 Collection View 的列数(垂直方向)或行数(水平方向)的最简单方法是什么? 最佳答案 我的做法(假设所有元素具有相同的大小
我正在尝试完成以下任务,我已经使用 UIScrollview 轻松完成了此任务,但我最近一直在尝试 UICollectionView (我知道我玩游戏已经很晚了)并且很想知道是否可以这样做我想要什么,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 关于您编写的代码问题的问题必须在问题本身中描述具体问题 — 并且包括有效代码 以重现它。参见 SS
我正在使用 UICollectionViewFlowLayout 来显示 GridView ,这就是我所看到的。 问题出在左侧的缝隙上。我对使用 UICollectionViewFlowLayout
我想在 Collection View 中为每个单元格设置一个自定义大小的布局。正因为如此,我希望单元格能够很好地组合在一起,正如您在此处看到的那样: (第一个单元格是顶部单元格,然后左下角是数字 2
我对流布局进行了子类化,并将其设置为我的 Collection View 中的 collectionViewLayout。 然后我设置布局如下: - (id) init { if(self =
我有一个 UICollectionView,其中的项目可以在运行时修改它的高度。问题是当一个项目高于另一个项目时,项目周围有很多空白。 我正在寻找创建此属性的属性: 我想使用 UICollection
我正在使用 UICollectionViewFlowLayout 在水平 ScrollView 中排列 View 图 block 。默认情况下,我使用 UICollectionViewDelegate
我有一个 Collection View ,它被设置为一个水平的单元格行。它抛出以下约束错误(我正在使用 AutoLayout): The behavior of the UICollectionVi
我有一个 UICollectionView,它使用 UICollectionViewFlowLayout 的自定义子类,使节标题在滚动时粘在屏幕顶部,就像 UITableView 的普通样式一样。我的
我正在尝试修改 UICollectionViewFlowLayout(垂直滚动),以便将每个部分标题放置在该部分所有项目的左侧(而不是顶部,这是默认设置)。 也就是说,这是默认行为: ...这就是我想
我有一个带有 UICollectionViewFlowLayout 的 UICollectionView。我还实现了 UICollectionViewDelegateFlowLayout 协议(pro
我正在使用自定义 UICollectionViewFlowLayout使单元格在到达顶部时缩放和淡入淡出。为此,我正在申请 alpha和 transform到布局属性。这是我的代码( link to
我创建了一个继承自 UICollectionViewFlowLayout 的 Swift 类,并且我已经能够成功地完成一些巧妙的操作,例如更改它绘制的每个框之间的间距。我正在绘制日历,因此想象一下 2
我有一个相当标准的网格布局,使用 UICollectionViewFlowLayout 的子类.当用户点击一个单元格时,我会向下移动后续行中的单元格,以便为将出现的详细 View 腾出空间。它看起来像
经过一番摆弄后,我开始怀疑 UICollectionViewFlowLayout 的间距代码中存在错误。 问题很简单:我想在屏幕上显示五个按钮,我希望按钮之间的间距为 1 pt(视网膜显示屏上为 2
我有一个带有子类 UICollectionViewFlow 布局的 Collection View 。 我想要的效果是旋转(透视,圆形 y 轴)和运动缩放。 我的 Collection View 设置
我最近开始使用 UICollectionView,对 UICollectionViewFlowLayout 有点困惑。似乎 Collection View 中每个单元格的框架是在每个项目之间的相等空间
我是一名优秀的程序员,十分优秀!