Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- - (void)tile
- {
- var width = CGRectGetWidth([self bounds]);
- if (![_content count] || width == _tileWidth)
- return;
- // We try to fit as many views per row as possible. Any remaining space is then
- // either proportioned out to the views (if their minSize != maxSize) or used as
- // margin
- var itemSize = CGSizeMakeCopy(_minItemSize);
- _numberOfColumns = MAX(1.0, FLOOR(width / itemSize.width));
- if (_maxNumberOfColumns > 0)
- _numberOfColumns = MIN(_maxNumberOfColumns, _numberOfColumns);
- var remaining = width - _numberOfColumns * itemSize.width,
- itemsNeedSizeUpdate = NO;
- if (remaining > 0 && itemSize.width < _maxItemSize.width)
- itemSize.width = MIN(_maxItemSize.width, itemSize.width + FLOOR(remaining / _numberOfColumns));
- // When we ONE column and a non-integral width, the FLOORing above can cause the item width to be smaller than the total width.
- if (_maxNumberOfColumns == 1 && itemSize.width < _maxItemSize.width && itemSize.width < width)
- itemSize.width = MIN(_maxItemSize.width, width);
- if (!CGSizeEqualToSize(_itemSize, itemSize))
- {
- _itemSize = itemSize;
- itemsNeedSizeUpdate = YES;
- }
- var index = 0,
- count = _items.length;
- _numberOfRows = CEIL(count / _numberOfColumns);
- if (_maxNumberOfRows > 0)
- {
- _numberOfRows = MIN(_maxNumberOfRows, _numberOfRows);
- // we need to recalc the number of columns now too
- _numberOfColumns = MAX(1.0, count / _numberOfRows);
- if (_maxNumberOfColumns > 0 && _numberOfColumns > _maxNumberOfColumns)
- _numberOfColumns = _maxNumberOfColumns;
- }
- if (_maxNumberOfColumns > 0 && _maxNumberOfRows > 0)
- count = MIN(count, _maxNumberOfColumns * _maxNumberOfRows);
- _horizontalMargin = MAX(0.0, FLOOR((width - _numberOfColumns * itemSize.width) / (_numberOfColumns + 1)));
- var x = _horizontalMargin,
- y = -itemSize.height;
- for (; index < count; ++index)
- {
- if (index % _numberOfColumns == 0)
- {
- x = _horizontalMargin;
- y += _verticalMargin + itemSize.height;
- }
- var view = [_items[index] view];
- [view setFrameOrigin:CGPointMake(x, y)];
- if (itemsNeedSizeUpdate)
- [view setFrameSize:_itemSize];
- x += itemSize.width + _horizontalMargin;
- }
- var superview = [self superview],
- proposedHeight = y + itemSize.height,// + _verticalMargin,
- proposedWidth = _numberOfColumns * (itemSize.width + _horizontalMargin);
- if ([superview isKindOfClass:[CPClipView class]])
- {
- var superviewSize = [superview bounds].size,
- scrollview = [superview superview];
- var newSize = [scrollview contentSize];
- proposedHeight = MAX(superviewSize.height, proposedHeight);
- proposedWidth = MAX(superviewSize.width - _horizontalMargin, proposedWidth);
- }
- _tileWidth = proposedWidth;
- [self setFrameSize:CGSizeMake(proposedWidth, proposedHeight)];
- _tileWidth = -1.0;
- }
Add Comment
Please, Sign In to add comment