Лучший способ добавить несколько изображений в какой массив? - PullRequest
0 голосов
/ 04 сентября 2011

Я создаю перетаскиваемые фрагменты букв для всех букв алфавита. Я создаю 5 каждой буквы в том случае, если для слова требуется более одной буквы.

Я программно создаю каждый UIImageView в моем MainViewControllers ViewDidLoad: метод.

- (void)ViewDidLoad:
{
        for (int i = 1; i <= 5; i++)
    {
        letterA = [[LetterTiles alloc] initWithFrame:CGRectMake(39, 104, 70, 70)];
        [letterA setImage:[UIImage imageNamed:@"a.png"]];
        letterA.tag = i;
        [letterA setUserInteractionEnabled:YES];
        [self.view addSubview:letterA];
        [letterA release];

    for (int i = 1; i <= 5; i++)
    {
        letterB = [[LetterTiles alloc] initWithFrame:CGRectMake(112, 104, 70, 70)];
        [letterB setImage:[UIImage imageNamed:@"b.png"]];
        letterB.tag = i;
        [letterB setUserInteractionEnabled:YES];
        [self.view addSubview:letterB];
        [letterB release];
    }

    for (int i = 1; i <= 5; i++)
    {
        letterC = [[LetterTiles alloc] initWithFrame:CGRectMake(185, 104, 70, 70)];
        [letterC setImage:[UIImage imageNamed:@"c.png"]];
        letterC.tag = i;
        [letterC setUserInteractionEnabled:YES];
        [self.view addSubview:letterC];
        [letterC release];
    }   
}

У меня есть несколько вопросов:

  1. Должен ли я создавать массив для каждой буквы или создавать единый массив для всех букв?

  2. Какой массив я должен использовать? NSMutableArray / NSArray или NSMutableDictionary / NSDictionary? -Я пытался выяснить, как добавить все эти буквы во все вышеперечисленные типы массивов, а затем извлечь их, основываясь на их букве и теге, но никак не могу понять это. Кто-нибудь захочет показать мне пример с одной или двумя буквами в коде?

  3. Есть ли лучший способ сделать это, чем то, что я показываю и спрашиваю здесь?

1 Ответ

2 голосов
/ 04 сентября 2011

Вопрос 1

Лучше иметь один NSArray для всех букв, это уменьшает количество переменных, с которыми вам придется иметь дело. Имея что-то вроде этого:

NSArray *arrayA;
NSArray *arrayB;
NSArray *arrayC;
...
NSArray *arrayZ;

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

Вопрос 2

Изменяемое означает, что оно может быть обновлено, поэтому важный вопрос, должен ли ваш массив / словарь обновляться во время выполнения? Если ответ «нет», не изменяемый массив может быть лучше. С другой стороны, вам придется автоматически заполнять массив множеством вещей, поэтому наличие изменяемой версии может позволить вам иметь более чистый код (вместо [[NSArray alloc] initWithObjects:[UIImage imageNamed:@"A"], ...]).

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

Вопрос 3

Это личный выбор, но я не большой поклонник наличия вложенных структур данных в статически типизированных языках (например, делать это на python - блаженство myDictArray["key"][1]). Я бы использовал изменяемый словарь, в котором составлены ключи, для хранения соответствующих данных:

NSString *key = [NSString stringWithFormat:"%c%d", letter, number]; // For example "J3" is the 3rd J letter.

С другой стороны, вместо использования изображений, я бы использовал большие квадратные UILabels, чтобы сэкономить в памяти (и психическое здоровье, работая с таким количеством изображений, тьфу), и выбрать один из множества шрифтов, которые использует iOS Вот полный список ).

При этом для генерации всего потребовалось бы два вложенных форса, один для перебора каждой буквы, а затем один для каждых 5 повторений, а затем создать метку и выбросить ее в словарь (я бы написал код, но я не на маке).

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