1

こんにちは、数日間把握できなかった問題があります。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];
    }
}
4

2 に答える 2

0
CGPoint pt = [[touches anyObject] locationInView:nameofyour_imageview];

これを変更して、UIImageviewがself.viewではないことを示すか、ジェスチャーレコグナイザーをタップしてみてください

于 2012-07-30T05:25:12.333 に答える
0
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
      UITouch * touch = [[event allTouches]anyObject];
}
于 2012-07-30T01:26:57.660 に答える