Joe*_*ner 10 cs193p uibutton uiimage ios
我正在打牌.我希望卡片背面显示图像,卡片前端显示卡片内容.我已经将图像显示在背面,但我无法弄清楚如何在选中时将其清除.(所有运行 - 这个代码 - 当它选择的代码正在运行,所以我知道这不是一个不实际改变状态的问题.)这是我的代码:
-(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]];
}
}
Run Code Online (Sandbox Code Playgroud)
关于我做错了什么的任何想法?
我猜你的问题是这个(来自Apple文档setImage:forState:):
通常,如果未为状态指定属性,则默认使用该
UIControlStateNormal值.如果UIControlStateNormal未设置该值,则该属性默认为系统值.因此,您至少应该设置正常状态的值.
因此,您不能简单地为某些状态取消设置图像,因为默认图像将被使用.
我看到了这个问题的几个解决方案:
nilUIImageView您设置为卡片背面图像的子视图.如果卡面朝下,请使用setHidden:以显示子视图.如果卡面朝上,请使用setHidden:隐藏子视图.我可能会– addTarget:action:forControlEvents:在您的自定义按钮类中使用该方法来注册显示或隐藏卡片子视图的自定义方法.注意,你可以轻松拍摄选项2更进一步,在一个子视图显示卡的正面以及然后你就可以轻松地制作动画的两个子视图之间翻动过渡,使卡"翻转"按下时结束.
为其他状态创建透明图像的快速方法,因为nil将默认为UIControlStateNormal的值,是分配和分配空图像:
UIImage *cardBackImage = [UIImage imageNamed:@"cardback.png"];
UIImage *cardFrontImage = [[UIImage alloc] init];
[cardButton setImage:cardBackImage forState:UIControlStateNormal];
[cardButton setImage:cardFrontImage forState:UIControlStateSelected];
[cardButton setImage:cardFrontImage forState:UIControlStateSelected|UIControlStateDisabled];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9458 次 |
| 最近记录: |