Создание подкласса UIView или создание с помощью UIView

Я начну с того, что я хочу сделать, потому что я не уверен, что задаю правильный вопрос. Я создаю карту на основе сетки и собираюсь хранить массив объектов, чтобы сохранить состояние и представление карты. Каждый объект будет принадлежать к классу Tile. Должен ли я быть подклассом UIView или sublass NSObject и иметь ivar UIView. Я также планировал иметь UIImageView внутри UIView для загрузки изображения, представляющего этот фрагмент карты. Наконец, я хотел загрузить представление из NIB.

Лично я знаю, как сделать каждую из этих вещей, но не уверен в лучшей практике. Есть предположения?


person rob5408    schedule 28.10.2009    source источник
comment
ой, полностью пропустил тег «iphone», упс.   -  person rob5408    schedule 29.10.2009


Ответы (3)


Рассматривали ли вы слои Core Animation? Вы можете создать один вид с сеткой слоев, каждый со своими границами и положением в представлении. Похоже, это может дать вам то, что вам нужно. На телефоне установить содержимое слоя с изображением так же просто, как это:

CALayer *gridLayer = [CALayer layer];
[gridLayer setContents:(id)[gridImage CGImage]];
[gridLayer setBounds:[gridImage bounds]];

// Position the layer's center a x:25.0 y:25.0 within the view
[gridLayer setPosition:CGPointMake(25.0f, 25.0f)];

[[view layer] addSublayer:gridLayer];

Переменная gridImage — это UIImage*, который вы где-то разместили. Вам просто нужно рассчитать прямоугольники и позиции слоя и разместить их соответствующим образом.

person Matt Long    schedule 28.10.2009

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

Самый простой способ создать сетку — использовать UIImageView, которые позиционируются одним контроллером. Модель будет отслеживать логические отношения между квадратами карты и передавать их контроллеру, который будет загружать изображения в UIIMageView. Контроллер будет обрабатывать загрузку всего из nib.

Однако использование CALayers является предпочтительным передовым методом. Базовая модель, контроллер и отношения представления такие же, за исключением того, что CALayers заменяют ImageViews.

person TechZen    schedule 29.10.2009

Если я правильно понимаю, вы можете сделать подкласс UIImageView.

person Morion    schedule 28.10.2009