- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将在我的一个项目中创建一个书架。基本要求如下:
LXReorderableCollectionViewFlowLayout
的类来创建自定义布局(用于重新排序)继承自 UICollectionFlowLayout - (CGSize)collectionViewContentSize
{
return CGSizeMake(self.collectionView.bounds.size.width, self.collectionView.bounds.size.height+100);
}
然后我现在可以滚动了。在这里,我拉下第一行:
- (void)prepareLayout
{
// call super so flow layout can do all the math for cells, headers, and footers
[super prepareLayout];
NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
NSMutableDictionary *shelfLayoutInfo = [NSMutableDictionary dictionary];
// decoration view - emblem
NSIndexPath *indexPath = [NSIndexPath indexPathForItem:0 inSection:0];
UICollectionViewLayoutAttributes *emblemAttributes =
[UICollectionViewLayoutAttributes layoutAttributesForDecorationViewOfKind:[EmblemView kind]
withIndexPath:indexPath];
emblemAttributes.frame = [self frameForEmblem:YES];
dictionary[[EmblemView kind]] = @{indexPath: emblemAttributes};
// Calculate where shelves go in a vertical layout
int sectionCount = [self.collectionView numberOfSections];
CGFloat y = 0;
CGFloat availableWidth = self.collectionViewContentSize.width - (self.sectionInset.left + self.sectionInset.right);
int itemsAcross = floorf((availableWidth + self.minimumInteritemSpacing) / (self.itemSize.width + self.minimumInteritemSpacing));
for (int section = 0; section < sectionCount; section++)
{
y += self.headerReferenceSize.height;
//y += self.sectionInset.top;
int itemCount = [self.collectionView numberOfItemsInSection:section];
int rows = ceilf(itemCount/(float)itemsAcross)+1; // add 2 more empty row which doesn't have any data
for (int row = 0; row < rows; row++)
{
indexPath = [NSIndexPath indexPathForItem:row inSection:section];
shelfLayoutInfo[indexPath] = [NSValue valueWithCGRect:CGRectMake(0,y, self.collectionViewContentSize.width, self.itemSize.height + DECORATION_HEIGHT)];
y += self.itemSize.height;
if (row < rows - 1)
y += self.minimumLineSpacing;
}
y += self.sectionInset.bottom;
y += self.footerReferenceSize.height;
}
dictionary[[ShelfView kind]] = shelfLayoutInfo;
self.shelfLayoutInfo = dictionary;
}
- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect
{
NSArray *attributesArrayInRect = [super layoutAttributesForElementsInRect:rect];
// cell layout info
for (BookShelfLayoutAttributes *attribs in attributesArrayInRect)
{
attribs.zIndex = 1;
CATransform3D t = CATransform3DIdentity;
t = CATransform3DTranslate(t, 0, 0, 40);
attribs.transform3D = CATransform3DRotate(t, 15 * M_PI / 180, 1, 0, 0);
}
// Add our decoration views (shelves)
NSMutableDictionary* shelfDictionary = self.shelfLayoutInfo[[ShelfView kind]];
NSMutableArray *newArray = [attributesArrayInRect mutableCopy];
[shelfDictionary enumerateKeysAndObjectsUsingBlock:^(id key, NSValue* obj, BOOL *stop) {
if (CGRectIntersectsRect([obj CGRectValue], rect))
{
UICollectionViewLayoutAttributes *attributes = [UICollectionViewLayoutAttributes layoutAttributesForDecorationViewOfKind:[ShelfView kind] withIndexPath:key];
attributes.frame = [obj CGRectValue];
NSLog(@"decorationView rect = %@",NSStringFromCGRect(attributes.frame));
attributes.zIndex = 0;
//attributes.alpha = 0.5; // screenshots
[newArray addObject:attributes];
}
}];
attributesArrayInRect = [NSArray arrayWithArray:newArray];
NSMutableDictionary* emblemDictionary = self.shelfLayoutInfo[[EmblemView kind]];
NSMutableArray *newArray2 = [attributesArrayInRect mutableCopy];
[emblemDictionary enumerateKeysAndObjectsUsingBlock:^(NSIndexPath *indexPath, UICollectionViewLayoutAttributes *attributes, BOOL *innerStop) {
if (CGRectIntersectsRect(rect, attributes.frame)) {
[newArray2 addObject:attributes];
}
}];
attributesArrayInRect = [NSArray arrayWithArray:newArray2];
return attributesArrayInRect;
}
如果您有足够的耐心阅读这篇文章并提供任何建议或建议,我将不胜感激。如果我能解决所有问题,我会发布完整的源代码。先感谢您。
最佳答案
我建议检查你的最后一行并执行 [self.collectionView ScrollEnable:NO]
第一行相同,设置背景颜色清除 collectionView 和 collectionViewCell 以及背景 View 上设置的书架图像。
关于ios6 - 使用 UICollectionView 创建书架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15846742/
我正在尝试通过 attachments 表从 files 表中获取 filenames 以获取帖子。 附件表: post_id, file_id 文件表: id, filename 帖子表 attac
我正在尝试按目前有效的列对我的集合获取结果进行排序,但我希望排序不区分大小写。我浏览了书架文档并在此处和其他论坛进行了搜索,但无济于事。是否需要一些原始的 Knex 插入?非常感谢任何帮助。 这是我的
我想按元素的时间戳过滤数据库表。 表有行:ID、URL、时间表。 如何按一定范围内的时间戳过滤数据?就像 SQL 中通常的情况一样...在firstTime 和lastTime 之间 我尝试了这样的事
引用this post关于Booksleeve并且没有官方 Windows Redis distribuition ,最佳做法是什么?是在 Win32 上编译更好,还是“非官方”win32/64 发行
每次我访问需要身份验证的路线时,我都会在控制台中收到警告消息。 (node:940) 警告:在 xxxxxx\app\config\passport.js:15:19 处的处理程序中创建了一个 Pro
BookshelfJS 有以下使用“查询”的示例: model .query({where: {other_id: '5'}, orWhere: {key: 'value'}}) .fetch
我们在 MySQL 中使用 bookshelf.js。 我们有一个表:联系方式 ( id, name, email_Id, updated_Contact_At ) 书架查询: new Contact
我正在使用 Knex、Bookshelf 和 Postgres 编写应用程序。我希望从我的应用程序发出的所有 Postgres 命令都在一个模式中的表上。 有没有一种方法可以在不为每个单独的查询/命令
我是一名优秀的程序员,十分优秀!