Guest User

Untitled

a guest
May 27th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.02 KB | None | 0 0
  1. - (void)tile
  2. {
  3. var width = CGRectGetWidth([self bounds]);
  4.  
  5. if (![_content count] || width == _tileWidth)
  6. return;
  7.  
  8. // We try to fit as many views per row as possible. Any remaining space is then
  9. // either proportioned out to the views (if their minSize != maxSize) or used as
  10. // margin
  11. var itemSize = CGSizeMakeCopy(_minItemSize);
  12.  
  13. _numberOfColumns = MAX(1.0, FLOOR(width / itemSize.width));
  14.  
  15. if (_maxNumberOfColumns > 0)
  16. _numberOfColumns = MIN(_maxNumberOfColumns, _numberOfColumns);
  17.  
  18. var remaining = width - _numberOfColumns * itemSize.width,
  19. itemsNeedSizeUpdate = NO;
  20.  
  21. if (remaining > 0 && itemSize.width < _maxItemSize.width)
  22. itemSize.width = MIN(_maxItemSize.width, itemSize.width + FLOOR(remaining / _numberOfColumns));
  23.  
  24. // When we ONE column and a non-integral width, the FLOORing above can cause the item width to be smaller than the total width.
  25. if (_maxNumberOfColumns == 1 && itemSize.width < _maxItemSize.width && itemSize.width < width)
  26. itemSize.width = MIN(_maxItemSize.width, width);
  27.  
  28. if (!CGSizeEqualToSize(_itemSize, itemSize))
  29. {
  30. _itemSize = itemSize;
  31. itemsNeedSizeUpdate = YES;
  32. }
  33.  
  34. var index = 0,
  35. count = _items.length;
  36.  
  37. _numberOfRows = CEIL(count / _numberOfColumns);
  38.  
  39. if (_maxNumberOfRows > 0)
  40. {
  41. _numberOfRows = MIN(_maxNumberOfRows, _numberOfRows);
  42.  
  43. // we need to recalc the number of columns now too
  44. _numberOfColumns = MAX(1.0, count / _numberOfRows);
  45.  
  46. if (_maxNumberOfColumns > 0 && _numberOfColumns > _maxNumberOfColumns)
  47. _numberOfColumns = _maxNumberOfColumns;
  48. }
  49.  
  50.  
  51. if (_maxNumberOfColumns > 0 && _maxNumberOfRows > 0)
  52. count = MIN(count, _maxNumberOfColumns * _maxNumberOfRows);
  53.  
  54. _horizontalMargin = MAX(0.0, FLOOR((width - _numberOfColumns * itemSize.width) / (_numberOfColumns + 1)));
  55.  
  56. var x = _horizontalMargin,
  57. y = -itemSize.height;
  58.  
  59. for (; index < count; ++index)
  60. {
  61. if (index % _numberOfColumns == 0)
  62. {
  63. x = _horizontalMargin;
  64. y += _verticalMargin + itemSize.height;
  65. }
  66.  
  67. var view = [_items[index] view];
  68.  
  69. [view setFrameOrigin:CGPointMake(x, y)];
  70.  
  71. if (itemsNeedSizeUpdate)
  72. [view setFrameSize:_itemSize];
  73.  
  74. x += itemSize.width + _horizontalMargin;
  75. }
  76.  
  77. var superview = [self superview],
  78. proposedHeight = y + itemSize.height,// + _verticalMargin,
  79. proposedWidth = _numberOfColumns * (itemSize.width + _horizontalMargin);
  80.  
  81. if ([superview isKindOfClass:[CPClipView class]])
  82. {
  83. var superviewSize = [superview bounds].size,
  84. scrollview = [superview superview];
  85.  
  86. var newSize = [scrollview contentSize];
  87.  
  88. proposedHeight = MAX(superviewSize.height, proposedHeight);
  89. proposedWidth = MAX(superviewSize.width - _horizontalMargin, proposedWidth);
  90. }
  91.  
  92. _tileWidth = proposedWidth;
  93. [self setFrameSize:CGSizeMake(proposedWidth, proposedHeight)];
  94. _tileWidth = -1.0;
  95. }
Add Comment
Please, Sign In to add comment