Я делаю игру на соответствие в iOS, используя Objective-C есть набор из 12 карт (3 столбца и 4 строки), который представляет собой массив UIButton, соединенный с IBOutletCollection, проблема в том, что когда вы нажимаете на первую карту, вы также можете одновременно нажимать на другие карты, но допустимая карта для нажатия должна быть только 2 карты. Как я могу предотвратить касание карт, если повернутых карт больше 1 и меньше 2.

0
vidalbenjoe 11 Авг 2015 в 06:47
С помощью .userInteractionEnabled = YES/NO
 – 
0yeoj
11 Авг 2015 в 07:03

2 ответа

//One action for all buttons
-(void)buttonAction:(UIButton*)button
{

//if user select three button at a time, dont do further operations
if (previousButton && currentButton) {
    return;
}

//previous button is the first button
if(previousButton==nil)
{
    previousButton=button;
}
//current button is the second button
else if(currentButton==nil)
{
    currentButton=button;
}
//if button is selected, set button as not selected and vice versa
if([button isSelected]==NO)
{
    [button setSelected:YES];
}
else
{
    [button setSelected:NO];
}
//if user press the same button again and again
if (currentButton==previousButton)
{
    currentButton=nil;
    if([previousButton isSelected]==NO)
    {
        previousButton=nil;
    }
    return;
}    
  else if((currentButton!=previousButton)&&(currentButton!=nil))
{
    //both button tags are same, that means both selected state images are same
    if(previousButton.tag==currentButton.tag)
    {
        [self performSelector:@selector(delay) withObject:nil afterDelay:0.5];
    }
    else
    {
        [self performSelector:@selector(delayTwo) withObject:nil afterDelay:0.5];
    }
 } 
 }

-(void)delay
 {
    //[currentButton setHidden:YES];
    //[previousButton setHidden:YES];
  currentButton=nil;
previousButton=nil;
score++;
NSLog(@"Score %d",score);
//the final stage, that means left only two buttons
if(score==6)
{
    //[self endGame];
  }
 } 

-(void)delayTwo
{
   [currentButton setSelected:NO];
   [previousButton setSelected:NO];
  currentButton=nil;
  previousButton=nil;
}

В viewDidLoad назначьте все выбранные кнопки и изображения или заголовок в обычном состоянии, как вам нужно.

1
Shebin Koshy 11 Авг 2015 в 07:13

Я не уверен на 100%, к чему вы здесь клоните, но вы можете попробовать создать несколько экземпляров UITapGestureRecognizer. У вас может быть один на 1 нажатие, один на 2 и один на 3+. Таким образом, вы можете выбрать карты для 1 или 2 касаний, но игнорировать это, если их 3 или более.

0
SilentLupin 11 Авг 2015 в 06:59