我正在打卡片游戏.我想要卡片显示一张图像,卡片前面显示卡片内容.我已经将图像显示在背面,但是我无法确定当它被选中时如何清除它. (所有的run-this-code-when-it -s选择的代码正在运行,所以我知道这不是一个不是实际上改变状态的问题.)这是我的代码:
-(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 setImage:[UIImage imageNamed:@"cardback.png"] forState:UIControlStateNormal]; //I've tried varIoUs permutations of the following three lines,but the image never disappears. [cardButton setImage:nil forState:UIControlStateSelected]; [cardButton setImage:nil forState:UIControlStateSelected | UIControlStateHighlighted]; [cardButton setImage:nil forState:UIControlStateNormal]; cardButton.selected = card.faceUp; cardButton.alpha=(card.unplayable ? 0.3:1.0); [self.scoreLabel setText:[NSString stringWithFormat:@"score: %d",self.game.score]]; } }
对我做错了什么的想法?
解决方法
我猜你的问题是这个(从苹果文档的setImage:forState :):
In general,if a property is not specified for a state,the default is to use the
UIControlStateNormal
value. If theUIControlStateNormal
value is not set,then the property defaults to a system value. Therefore,at a minimum,you should set the value for the normal state.
因此,您不能简单地取消某些状态的图像,因为默认图像将被使用.
我看到这个问题的几个解决方案:
>将透明图像用于要显示的状态,而不是零
>给你的卡一个UIImageView子视图你设置回卡片.如果卡正面朝下,请使用setHidden:显示子视图.如果卡正面朝上,请使用setHidden:隐藏子视图.我可能会使用自定义按钮类中的 – addTarget:action:forControlEvents:方法来注册显示或隐藏卡回子视图的自定义方法.
请注意,您可以通过在子视图中显示卡片的前端,轻松取得选项2,然后您可以轻松地在两个子视图之间进行翻转过渡动画,以便卡片在按下时“翻转”.