[英]Using an NSMutableArray to set images to multiple UIImageViews
我是iOS開發的新手,所以如果這個問題很愚蠢,請原諒我,但它困擾着我。
我已經為自己設定了為iPhone制作Hangman游戲的任務。 游戲開始時,我希望字母隨機填充到我已經在ViewController
設置的26個UIImageView
中。
我有2 NSMutableArray
的設置。 一個保存着字母圖像的UIImage引用,另一個保存着一個包含所有UIImageViews
名稱的字符串數組。
我想要做的是通過for
或while
循環運行,並將圖像分配給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個數組, imgViewsAlphabet
和alphabet
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.