我想测试以确保每隔几秒就会在屏幕上显示一个手指。目前,当ccTouchesBegan发生时,我发生的事情是,你可以关闭你的设备并将其重新打开,它仍然认为手指在屏幕上,或者至少功能仍在继续。有办法防止这种情况吗?就像创建一个@selctor来测试它一样?
答案 0 :(得分:0)
这就是我要做的......
在我的实现中,我会创建一个名为' isItStillBeingTouched'
的boolHelloWorldLayer.h
@interface HelloWorldLayer
@property bool isItStillBeingTouched; // Should be fine anywhere between interface & end
@end
虽然你还没有说过,但我猜你有循环正在执行你想要实现的任务,因此他们为什么不自行停止。您可以尝试将其全部包装在Do While循环中:
-(void) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
isItStillBeingTouched = YES;
while (isItStillBeingTouched) {
// Your current code....
}
}
您需要从AppDelegate访问HelloWorldLayer类的isItStillBeingTouched
bool
,因此更改所述类以在helloWorldLayer.m中包含此方法
+ (id)sharedManager {
static HelloWorldLayer *sharedMyManager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedMyManager = [[self alloc] init];
});
return sharedMyManager;
}
然后在HelloWorldLayer.h中,在+(id)sharedManager;
和@interface HelloWorldLayer
语句之间的任何位置插入@end
。任何{
或}
内的不。
下一步是在应用程序进入后台时将bool
isItStillBeingTouched更改为NO
。
转到你的AppDelegate.m,找到:
-(void) applicationDidEnterBackground:(UIApplication*)application
将此更改为包括将isItStillBeingTouched
bool
设置为NO(在if语句中),并且您的方法应该停止运行。
首先调用HelloWorldLayer的实例,然后将属性更改为NO
。为此,您需要添加#import "HellowWorldLayer.h"
假设您之前从未改变AppDelegate,它应该看起来像这样:
#import "AppDelegate.h"
#import "IntroLayer.h"
#import "HellowWorldLayer.h"
//...The stock appDelegate code...
-(void) applicationDidEnterBackground:(UIApplication*)application
{
if( [navController_ visibleViewController] == director_ )
{
[director_ stopAnimation];
HelloWorldLayer *myLocalInstanceOfTheHelloWorldLayerClass;
myLocalInstanceOfTheHelloWorldLayerClass.levelToLoadUp = NO;
}
}