1

この SO-answerで説明されているようUITapGestureRecognizerに、のサブクラスに実装しようとしていUIIMageViewます。私のアプローチは以下にあります。

のインスタンスMenuButtonImageViewは のサブビューですhomeScreenViewController.view

も実装しましたがtouchesBegan:withEvent:、うまく動作します。touchesMoved:withEvent:touchesEnded:withEvent:

問題: どういうわけかhandleSingleFingeredTap:呼び出されません。これには何が問題になる可能性がありますか?

@interface MenuButtonImageView : UIImageView

@property (nonatomic, weak) IBOutlet HomescreenViewController *homeScreenViewController;
@property (nonatomic, readwrite) Visibility visibility;

- (void)handleSingleFingeredTap:(UITapGestureRecognizer *)recognizer;

@end

@implementation MenuButtonImageView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        self.visibility = HIDDEN;
        self.userInteractionEnabled = YES;
        UITapGestureRecognizer * singleFingeredTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleFingeredTap:)];
        singleFingeredTap.numberOfTapsRequired = 1;
        [self addGestureRecognizer:singleFingeredTap];
    }
    return self;
}

- (void)handleSingleFingeredTap:(UITapGestureRecognizer *)recognizer {
    NSLog(@"handleTap was called"); // This method is not called!
    [self toggleMainMenu];
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { ... }
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { ... }
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { ... }

@end
4

1 に答える 1

1

メソッドに認識機能を追加しinitWithFrameます。ビューがこのように初期化されているかどうかを確認してください。のような別のコンストラクターで作成される可能性がありinitWithCoder、コードは実行されません。initWithFrameメソッド内にブレークポイントを配置して確認します。

コードを別のメソッドに入れて、両方のコンストラクターから呼び出すことができます。使い方次第です。はinitWithFrame、コードからビューを作成するときによく使用されます。

于 2012-08-30T17:21:52.307 に答える