こんにちは、数日間把握できなかった問題があります。touchesBegan メソッドを使用して、誰かが UIImageView をタップしていることを通知し、NSTimers を使用して別の UIImageView を上下に移動できるようにします。何らかの理由で TouchesBegan が機能しません。NSLogs でテストした結果、メソッドが呼び出されていないことが示されているため、これが問題であることはわかっています。これが私のコードです。非常に簡単な修正があり、それが私を愚かに見せる場合は、PSに感謝します。申し訳ありませんが、開発してまだ6日しか経っていません。
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
CGPoint pt = [[touches anyObject] locationInView:self.view];
if (CGRectContainsPoint(flyImageButton.frame, pt)) {
flying = YES;
[playerFall invalidate];
playerFlyUp = [NSTimer scheduledTimerWithTimeInterval:.03 target:self selector:@selector(flyUp) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:playerFlyUp forMode:NSRunLoopCommonModes];
}
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
if (flying == YES) {
flying = NO;
[playerFlyUp invalidate];
[self startFallTimer];
}
}
質問者の .h ファイルは次のとおりです...
#import <UIKit/UIKit.h>
@interface GameViewController : UIViewController {
IBOutlet UILabel *scoreLabel, *coinsLabel;
IBOutlet UIImageView *flyImageButton, *playerImage, *flyingObject;
IBOutlet UIScrollView *scroll;
int score;
int coins;
BOOL flying;
NSTimer *playerFlyUp, *playerFall, *scoreTimer, *coinsTimer;
}
@end
私もそのようにUITouchを試しました...
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
//CGPoint pt = [[touches anyObject] locationInView:self.view];
UITouch *touch = [[event allTouches]anyObject];
//if (CGRectContainsPoint(flyImageButton.frame, pt)) {
if ([touch view] == flyImageButton) {
flying = YES;
[playerFall invalidate];
playerFlyUp = [NSTimer scheduledTimerWithTimeInterval:.03 target:self selector:@selector(flyUp) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:playerFlyUp forMode:NSRunLoopCommonModes];
}
}
私にとって本当に混乱しているのは、どこに触れても、NSLog「Pos 1」がトリガーされないことです...
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
//CGPoint pt = [[touches anyObject] locationInView:self.view];
UITouch *touch = [[event allTouches]anyObject];
CGPoint loc = [touch locationInView:self.view];
//This NSLog never displays leading me to think that my CGPoint isn't the issue...
NSLog(@"Pos 1");
if (CGRectContainsPoint(flyImageButton.frame, loc)) {
//if ([touch view] == flyImageButton) {
NSLog(@"Pos 2");
flying = YES;
[playerFall invalidate];
playerFlyUp = [NSTimer scheduledTimerWithTimeInterval:.03 target:self selector:@selector(flyUp) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:playerFlyUp forMode:NSRunLoopCommonModes];
}
}