簡體   English   中英

使用NSMutableArray將圖像設置為多個UIImageViews

[英]Using an NSMutableArray to set images to multiple UIImageViews

我是iOS開發的新手,所以如果這個問題很愚蠢,請原諒我,但它困擾着我。

我已經為自己設定了為iPhone制作Hangman游戲的任務。 游戲開始時,我希望字母隨機填充到我已經在ViewController設置的26個UIImageView中。

我有2 NSMutableArray的設置。 一個保存着字母圖像的UIImage引用,另一個保存着一個包含所有UIImageViews名稱的字符串數組。

我想要做的是通過forwhile循環運行,並將圖像分配給UIImageViews

這是我當前正在使用的代碼。

- (void)randomizeAlphabet
{
    // Code to randomise Letters on start up of the App.
    NSMutableArray *alphabet = [[NSMutableArray alloc] initWithObjects:
                     [UIImage imageNamed:@"A.png"],
                     [UIImage imageNamed:@"B.png"],
                     [UIImage imageNamed:@"C.png"],
                     [UIImage imageNamed:@"D.png"],
                     [UIImage imageNamed:@"E.png"],
                     [UIImage imageNamed:@"F.png"],
                     [UIImage imageNamed:@"G.png"],
                     [UIImage imageNamed:@"H.png"],
                     [UIImage imageNamed:@"I.png"],
                     [UIImage imageNamed:@"J.png"],
                     [UIImage imageNamed:@"K.png"],
                     [UIImage imageNamed:@"L.png"],
                     [UIImage imageNamed:@"M.png"],
                     [UIImage imageNamed:@"N.png"],
                     [UIImage imageNamed:@"O.png"],
                     [UIImage imageNamed:@"P.png"],
                     [UIImage imageNamed:@"Q.png"],
                     [UIImage imageNamed:@"R.png"],
                     [UIImage imageNamed:@"S.png"],
                     [UIImage imageNamed:@"T.png"],
                     [UIImage imageNamed:@"U.png"],
                     [UIImage imageNamed:@"V.png"],
                     [UIImage imageNamed:@"W.png"],
                     [UIImage imageNamed:@"X.png"],
                     [UIImage imageNamed:@"Y.png"],
                     [UIImage imageNamed:@"Z.png"],
                     nil];

NSMutableArray *imgViewsAlphabet = [[NSMutableArray alloc] initWithObjects:
                                    @"letterA",
                                    @"letterB",
                                    @"letterC",
                                    @"letterD",
                                    @"letterE",
                                    @"letterF",
                                    @"letterG",
                                    @"letterH",
                                    @"letterI",
                                    @"letterJ",
                                    @"letterK",
                                    @"letterL",
                                    @"letterM",
                                    @"letterN",
                                    @"letterO",
                                    @"letterP",
                                    @"letterQ",
                                    @"letterR",
                                    @"letterS",
                                    @"letterT",
                                    @"letterU",
                                    @"letterV",
                                    @"letterW",
                                    @"letterX",
                                    @"letterY",
                                    @"letterZ"
                                    , nil];
//Randomly assign the letter from the array
while ([alphabet count] > 0 )
{
    int index = arc4random_uniform([alphabet count]);
    [(UIImageView *)[imgViewsAlphabet objectAtIndex:index] setImage:[alphabet objectAtIndex:index]];
    [alphabet removeObjectAtIndex:index];
    [imgViewsAlphabet removeObjectAtIndex:index];
}
}

上面的代碼在Xcode中看起來不錯,但是在編譯時會崩潰。

任何幫助將不勝感激。

TQ干杯

您有2個數組, imgViewsAlphabetalphabet

imgViewsAlphabet是一個字符串數組。

字母是UIImage對象的數組。

這行:

[(UIImageView *)[imgViewsAlphabet objectAtIndex:index] 
  setImage:[alphabet objectAtIndex:index]];

試圖從imgViewsAlphabet數組中獲取一個對象,並向其發送setImage:消息。

imgViewsAlphabet數組中有哪些對象? 這類對象是否了解setImage方法?

@DuncanC是正確的。 似乎您正在尋找具有以隨機,非重復方式選擇的圖像的圖像視圖陣列。 一種簡單的好方法是依次構建該數組,然后將其洗牌:

NSMutableArray *imageViewArray = [NSMutableArray array];
for (char aChar = 'A'; aChar <= 'z'; ++aChar)  {
    NSString *imageName = [NSString stringWithFormat:@"%c.png", aChar];
    UIImage *image = [UIImage imageNamed:imageName];
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
    [imageViewArray addObject:imageView];
}

現在將其隨機播放。 有很多方法可以做到這一點,例如Fisher-Yates算法 這是獲得好評的SO答案 簡而言之:

NSUInteger count = [imageViewArray count];
for (NSUInteger i = 0; i < count; ++i) {
    NSInteger remainingCount = count - i;
    NSInteger exchangeIndex = i + arc4random_uniform(remainingCount);
    [imageViewArray exchangeObjectAtIndex:i withObjectAtIndex:exchangeIndex];
}

這將為您提供UIImageViews數組,其圖像以隨機順序命名為@“ A.png”,@“ B.png”等。 您需要分配這些框架並將其作為子視圖添加到某個視圖中才能看到。

暫無
暫無

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

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