В моей игре с соответствующими картами i'v создал метод IBAction
для новой игры.Невозможно обновить UI
Теперь у меня есть метод, называемый updateUI
, чтобы изменить состояние UI
в соответствии с действиями.
updateUI
В моем методе я есть внутримышечно, призывающую альфа угасать соответствующие карты, но когда я звоню метод newGame
, Карты все еще исчезают от времени я назвал альфа ...
Это мой 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;
}
Я использую ARC ... что вы подразумеваете под основной темой? @ arun.s – JohnBigs
Ya ... bt убедитесь, что у вас есть объекты .. например, например, объекты cardbuttons в вашем массиве или нет?. Основной поток - это то, где происходит обновление UI. UI не будет обновляться при вызове из вторичного therad –