0

在我的匹配纸牌游戏中,我IBAction为 newGame 创建了一个方法。

现在,我有一个方法被调用来根据动作updateUI改变状态。UI

在我的updateUI方法中,我有一个即时调用 alpha 以淡化匹配的卡片,但是当我调用该newGame方法时,卡片仍然从我调用 alpha 的时间消失......

这是我的ViewController,请告诉我我做错了什么......谢谢!:

#import "CardGameViewController.h"
#import "PlayingCardsDeck.h"
#import "CardMatchingGame.h"


@interface CardGameViewController ()

@property (weak, nonatomic) IBOutlet UILabel *flipsLabel;
@property (weak, nonatomic) IBOutlet UILabel *notificationLabel;
@property (weak, nonatomic) IBOutlet UILabel *scoreCounter;
@property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *cardButtons;

@property (strong, nonatomic) CardMatchingGame *game;
@property (nonatomic) int flipsCount;

@end


@implementation CardGameViewController

//creating the getter method that creates a new card game.
-(CardMatchingGame *) game {

    if (!_game) _game = [[CardMatchingGame alloc] initWithCardCount:self.cardButtons.count usingDeck:[[PlayingCardsDeck alloc] init]];
    return _game;
}

//creating a setter for the IBOutletCollection cardButtons
-(void) setCardButtons:(NSArray *)cardButtons {

    _cardButtons = cardButtons;
   [self updateUI];
}


//creating the setter for the flipCount property. Whick is setting the flipsLabel to the right text and adding the number of counts.
-(void) setFlipsCount:(int)flipsCount {

    _flipsCount = flipsCount;
    self.flipsLabel.text = [NSString stringWithFormat:@"Flips: %d", self.flipsCount];

}


-(void) updateUI {

    for (UIButton *cardButton in self.cardButtons) {
        Card *card = [self.game cardAtIndex:[self.cardButtons indexOfObject:cardButton]];
        [cardButton setTitle:card.contents forState:UIControlStateSelected];
        [cardButton setTitle:card.contents forState:UIControlStateSelected|UIControlStateDisabled];
        cardButton.selected = card.isFaceUp;
        cardButton.enabled = !card.unplayble;
        if (card.unplayble) {
            cardButton.alpha = 0.1;
        }
        self.scoreCounter.text = [NSString stringWithFormat:@"Score: %d", self.game.score];


        if (self.game.notification) {

        self.notificationLabel.text = self.game.notification;

        }
    }
}


//Here I created a method to flipCards when the card is selected, and give the user a random card from the deck each time he flips the card. After each flip i'm incrementing the flipCount setter by one.
- (IBAction)flipCard:(UIButton *)sender {

    [self.game flipCardAtIndex:[self.cardButtons indexOfObject:sender]];
    self.flipsCount++;
    [self updateUI];
}



- (IBAction)newGame:(UIButton *)sender {

    [self.game cleanHistory];

    self.flipsCount = 0;

    self.game = nil;

    [self updateUI];

}


@end

这是 cleanHistory 方法:

-(void)cleanHistory {

    for (Card *card in self.cards) {
        card.unplayble = NO;
        card.faceUp = NO;
    }

    self.notification = nil;
    self.score = 0;

}
4

1 回答 1

1

确保所有对象都存在且未释放/自动释放和/或确保在主线程中刷新 UI。

于 2013-03-12T05:50:38.240 回答