我正在使用精灵工具包,我有一个我在initWithSize方法中设置的SKLabelNode。它被声明为..
@property (nonatomic, strong) SKLabelNode *chargesToShowUponCompletion;
在initWithSize方法中,我以这种方式创建..
_chargesToShowUponCompletion = [SKLabelNode labelNodeWithFontNamed:@"Chalkduster"];
_chargesToShowUponCompletion.fontSize = 40;
_chargesToShowUponCompletion.fontColor = [SKColor whiteColor];
_chargesToShowUponCompletion.position = CGPointMake(self.size.width/2, 1.5/3.0 * self.size.height);
_chargesToShowUponCompletion.zPosition = 20;
[self addChild:_chargesToShowUponCompletion];
[_chargesToShowUponCompletion setHidden:YES];
正如您所看到的,我在将LabelNode添加到场景后立即隐藏它。我实际上有几个我这样创造的,并且我在不同的时间展示它们。特别是这个需要显示一点,然后消失。所以为了实现这一点,我使用了以下内容。
[_chargesToShowUponCompletion performSelector:@selector(setHidden:) withObject:@YES afterDelay:3];
这在iPhone 5,iPhone 4和模拟器中完美运行。但是,当我在64位计算机或模拟器上运行它时,它不起作用。它实际上就像我有setHidden withObject:@NO。我认为它与64和32位iPhone有关,但我无法弄明白。我阅读了Apple关于支持两者的文档,并且我将我的架构设置为标准版。有什么方法可以让这个选择器在两种类型的机器上运行?此外,我创建的其他LabelNodes在不同时间被隐藏和显示,它们都可以工作,但它们都没有处理选择器。有任何想法吗?谢谢你的帮助!
答案 0 :(得分:0)
因此,如果有人跟着这个,或者遇到同样的问题,我会用两种不同的方式解决它。第一个是保留@selector(setHidden)代码行。我用@(1l)替换了@YES,这解决了在5s上运行的问题。
[_chargesToShowUponCompletion performSelector:@selector(setHidden:) withObject:@(1l) afterDelay:3]; //change @YES to @(1l)
[_substanceToShowUponCompletion performSelector:@selector(setHidden:) withObject:@(1l) afterDelay:3];
更新:我听说以这种方式使用performSelector是不好的。我会选择运行块。
另一种方法是像这样制作SKAction run Block。
SKAction *action1 = [SKAction waitForDuration:3.0];
SKAction *action2 = [SKAction runBlock:^{
_chargesToShowUponCompletion.hidden = YES;}];
SKAction *action3 = [SKAction runBlock:^{
_substanceToShowUponCompletion.hidden = YES;}];
SKAction *seq1 = [SKAction sequence:@[action1, action2]];
SKAction *seq2 = [SKAction sequence:@[action1, action3]];
[_chargesToShowUponCompletion runAction:seq1];
[_substanceToShowUponCompletion runAction:seq2];
我跑了两次,因为我有两个SKLabelnodes要隐藏。希望这有助于某人!!!!