Переместить изображения в случайные заполнители - PullRequest
0 голосов
/ 25 марта 2012

У меня есть простая головоломка, которую я делаю.У меня есть метод, который вызывается, когда представление загружается и когда устройство встряхивается.Этот метод размещает 4 изображения в 4 конкретных местах на экране.Ниже приведен код:

-(void) makePieceHolders {
//create 4 points where the jigsaw pieces (images) will be placed
CGPoint holder1 = CGPointMake(80, 80);
CGPoint holder2 = CGPointMake(200, 80);
CGPoint holder3 = CGPointMake(80, 200);
CGPoint holder4 = CGPointMake(200, 200);

image1.center = holder1;    //set the position of the image center to one of the newly created points
image1.alpha = 0.3;         //set the image opacity back to 0.3
image2.center = holder2;
image2.alpha = 0.3;
image3.center = holder3;
image3.alpha = 0.3;
image4.center = holder4;
image4.alpha = 0.3;
}

Я хотел бы разместить изображения случайным образом в четырех заполнителях.У меня есть еще немного кода, написанного ниже, где я получаю случайное число от 1 до 4 и устанавливаю тег каждого изображения для каждого из этих случайных чисел.

int randomNumber;
int placeHolders[4];
int i=0;
bool numberFound;

do{ // until you get 4 unique numbers
    randomNumber=arc4random()%4+1;
    // Does this number exist already?
    numberFound=FALSE;
    for (int j=0; j<i; j++) {
        if (placeHolders[j]==randomNumber)
            numberFound=TRUE;
    }
    if (numberFound==FALSE){
        placeHolders[i]=randomNumber;
        i++;
    }
} while (i<4);

image1.tag = placeHolders[0];
image2.tag = placeHolders[1];
image3.tag = placeHolders[2];
image4.tag = placeHolders[3];


NSLog(@"img1 tag: %i img2 tag: %i img3 tag: %i img4 tag: %i", image1.tag, image2.tag, image3.tag, image4.tag);

Как теперь обращаться к этой информации тега в порядкепереместить его в заполнитель?

В псевдокоде я думал:

where image tag = 1, move that image to holder1
where image tag = 2, move that image to holder2
............

Хотя я не знаю, как это написать.

Если есть лучший способ, я был бы признателен за помощь.Спасибо

1 Ответ

1 голос
/ 25 марта 2012

Вам не нужна сложная логика do.. while / tag.Просто используйте массив:

NSMutableArray* images = [NSMutableArray arrayWithObjects: image1,image2,image3,image4,nil];

// shuffle the array
NSUInteger count = [images count];
for (NSUInteger i = 0; i < count; i++) {
    // Select a random element between i and end of array to swap with.
    int nElements = count - i;
    int n = (arc4random() % nElements) + i;
    [images exchangeObjectAtIndex:i withObjectAtIndex:n];
}

После этого вы случайным образом разместите ваши изображения в новом порядке.После этого назначьте позиции:

UIImageView* imageView1 = (UIImageView*)[images objectAtIndex: 0];
imageView.center = holder1;
UIImageView* imageView2 = (UIImageView*)[images objectAtIndex: 1];
imageView.center = holder2;
UIImageView* imageView3 = (UIImageView*)[images objectAtIndex: 2];
imageView.center = holder3;
UIImageView* imageView4 = (UIImageView*)[images objectAtIndex: 3];
imageView.center = holder4;

(Вы также можете сделать это в цикле .. так что это будет более общим и многоразовым.)

...