簡體   English   中英

將多個圖像添加到哪種陣列的最佳方法?

[英]Best way to add multiple images to what kind of array?

我正在為字母表中的所有字母創建可拖動的字母拼貼。 如果一個單詞需要多個相同的字母,我會在每個字母中創建5個字母。

我在我的MainViewControllers ViewDidLoad:方法中以編程方式創建每個UIImageView。

- (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

對所有字母使用單個NSArray更好,它減少了您必須處理的變量數量。 有這樣的事情:

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

只有很多代碼可以在單個數據結構中輕松訪問,更不用說,如果您計划添加數字,puncutation等,更容易更新。

問題2

Mutable意味着它可以更新,所以重要的問題,你的Array / Dictionary應該在運行時更新嗎? 如果答案是否定的,那么非可變數組可能會更好。 另一方面,你必須自動用很多東西填充數組,所以擁有一個可變版本可能會讓你有更清晰的代碼(而不是[[NSArray alloc] initWithObjects:[UIImage imageNamed:@"A"], ...] )。

所以我會選擇可變版本,只是為了更清晰的代碼。

問題3

這是個人選擇,但我不喜歡在靜態類型語言中嵌套數據結構(在python中這樣做是一種幸福,例如myDictArray["key"][1] )。 我會使用組成鍵的Mutable Dictionary來存儲相關數據:

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

另一方面,我不使用圖像,而是使用大方形UILabel,以節省內存(和心理健全,處理那么多圖像,呃),並選擇iOS使用的許多字體之一( 這里是一個完整的)清單 )。

有了這個,生成一切,需要兩個嵌套的fors,一個遍歷每個字母,然后每5個重復一個,然后創建標簽並將其扔到字典中(我會寫代碼,但我不在一個mac)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM