Как реализовать Isotope - Elements Complete на iphone? - PullRequest
0 голосов
/ 25 августа 2011

Пожалуйста, перейдите по адресу: http://isotope.metafizzy.co/demos/elements-complete.html

Я хочу реализовать на iPhone «Переключить переменный размер» часть.

Чтобы быть более конкретным, я хочучтобы расположить мои 30+ фотографий (одинакового размера) в режиме прокрутки, и я хочу, чтобы это выглядело как «Переключить размер переменной» выглядит так.

Реализация должна быть родной, яугадайте с помощью view-controller или какого-нибудь табличного представления с пользовательскими ячейками.

Есть ли у вас какие-либо мысли о том, как лучше всего реализовать это на iPhone?

1 Ответ

1 голос
/ 25 августа 2011

В этом ответе я приведу очень общий обзор того, как бы я подошел к вашей проблеме.

Создайте пользовательский подкласс вида прокрутки, скажем, TiledGridView. Для простоты предположим, что интерфейс выглядит примерно так:

@interface TiledGridView : UIScrollView {
    NSArray *tileData;
}
@property(retain) NSArray *tileData;
- (void)layoutSubviews;
@end

Массив tileData содержит информацию о плитках (местоположение, размер и изображение). Вы устанавливаете tileData, используя синтезированные средства доступа в простейшем случае. Вы можете создать ViewController, который фактически вычисляет позиции плиток, или вы можете добавить метод в представление. Для дальнейшего обсуждения предположим, что tileData содержит все данные о плитках, которые нам нужны, и что мы уже знаем их позиции и т. Д.

Затем наиболее важной частью является переопределение сообщения layoutSubviews в вашем подклассе. В layoutSubviews вы будете делать следующее:

  • проверить границы TiledGridView
  • добавить UIImageView с (или что угодно) для плиток, которые находятся в этих пределах
  • убрать плитки за пределы

Вы делаете это так, чтобы вам не хватало памяти, когда у вас много изображений. Это также то, что делает UITableView, но они даже повторно используют представления.

Псевдо-реализация может выглядеть примерно так:

- (void)layoutSubviews {
  CGRect bounds = self.bounds;

  for (id tile in tileData) {
    if (/*tile is not yet visible and tile overlaps bounds*/) {
      UIView newTileView = /* create the view for the tile */
      [self insertSubview:newTileView atIndex:0];
   } else if (/*tile is visible and no longer overlaps bounds*/) {
      UIView oldTileView = /* fetch the corresponding view */
      [oldTileView removeFromSuperview];
    }
  }

Это сделает ваш просмотр очень быстрым, поскольку подпредставления добавляются только по мере необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...