3

XCode 4.5.1 を使用しています。

<UIGestureRecognizerDelegate>.h ファイルと .m ファイルの先頭に追加しました

@interface FirstViewController ()

@property (nonatomic, strong) UIImageView *img1;

@end

次に、プログラムで次のようviewDidLoadに作成しますUIImageView

self.img1 = [[UIImageView alloc] initWithFrame:CGRectMake(50, -30, 44, 44)];
[self.img1 setImage:[UIImage imageNamed:@"image1.png"]];
[self.img1 setAlpha:0.8];
[self.img1 setHidden:NO];
[self.img1 setUserInteractionEnabled:YES];
[self.img1 setTag:901];

その後

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(guessTapObject:)];
tap.numberOfTapsRequired = 1;
tap.numberOfTouchesRequired = 1;
tap.delegate = self;

[self.img1 addGestureRecognizer:tap];

[self.view addSubview:self.img1];
[self.view bringSubviewToFront:self.img1];

そして最後に

- (void)guessTapObject:(UITapGestureRecognizer *) gesture
{
    // guessing the image
    UIImageView *tapImageView = (UIImageView*) gesture.view;
    NSLog(@"Gesture Tag: %d", tapImageView.tag);
}

上記のように、4つの異なる画像があり、プログラムでそれらを作成しています。アニメーションを適用して、上から下に移動します。

ユーザーが画像をタップすると、アニメーション化して消えるはずです(そのコードは知っています)。しかし、コードはタップ イベントをトリガーしていません。関数の先頭にブレークポイントを設定しましたが、guessTapObjectそこには決して行きません。

UITapGestureRecognizer宣言時guessTapObjectに、タップ アクションを実行するためにレコグナイザーにアタッチされていることがデバッグによって示されます。

タップ イベントがセレクター メソッドをトリガーしない理由を教えてください。

事前にご協力いただきありがとうございます。


編集済み: for ループを使用して、画像ビューごとにジェスチャ認識機能を個別に使用しようとしました

for (UIView * view in self.view.subviews) {
    if (view.tag > 900){
        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(guessTapObject:)];
        tap.numberOfTapsRequired = 1;
        tap.numberOfTouchesRequired = 1;
    //    tap.delegate = self;
        [view addGestureRecognizer:tap];
        NSLog(@"tapView: %@", tap.view);
        NSLog(@"tap: %i", tap.enabled);
    }
}
4

3 に答える 3

5

私は同様の問題で立ち往生していました..imageViewがuserInteractionにtrueに設定されていることを確認してください..

imageView.userInteractionEnabled = YES;

それは私のために働いた!

于 2013-10-28T05:46:58.917 に答える
2

これを確認して
ください 次のコードをView Controllerに追加してください

  • viewController.h ファイル内

    @property (nonatomic, strong) UIImageView *img1;
    @property (nonatomic, strong) UIImageView *img2;
    @property (nonatomic, strong) UIImageView *img3;
    
  • viewController.m ファイル
    内 viewDidLoad メソッド内

    // Init Image 1 
    self.img1 = [[UIImageView alloc] initWithFrame:CGRectMake(50, 30, 44, 44)];
    [self.img1 setImage:[UIImage imageNamed:@"image1_name.jpg"]];
    [self.img1 setAlpha:0.8];
    [self.img1 setHidden:NO];
    [self.img1 setUserInteractionEnabled:YES];
    [self.img1 setTag:901];
    
    // Init Image 2
    self.img2 = [[UIImageView alloc] initWithFrame:CGRectMake(100, 30, 44, 44)];
    [self.img2 setImage:[UIImage imageNamed:@"image2_name.jpg"]];
    [self.img2 setAlpha:0.8];
    [self.img2 setHidden:NO];
    [self.img2 setUserInteractionEnabled:YES];
    [self.img2 setTag:902];
    
    // Init Image 3
    self.img3 = [[UIImageView alloc] initWithFrame:CGRectMake(50, 130, 44, 44)];
    [self.img3 setImage:[UIImage imageNamed:@"image3_name.jpg"]];
    [self.img3 setAlpha:0.8];
    [self.img3 setHidden:NO];
    [self.img3 setUserInteractionEnabled:YES];
    [self.img3 setTag:903];
    
    // Add Images to view
    [self.view addSubview:self.img1];
    [self.view bringSubviewToFront:self.img1];
    
    [self.view addSubview:self.img2];
    [self.view bringSubviewToFront:self.img2];
    
    [self.view addSubview:self.img3];
    [self.view bringSubviewToFront:self.img3];
    
    // Set Tap Gesture to each image of view
    for (UIView * view in self.view.subviews) {
      if (view.tag > 900){
         UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] 
                                          initWithTarget:self 
                                          action:@selector(guessTapObject:)];
         tap.numberOfTapsRequired = 1;
         tap.numberOfTouchesRequired = 1;
         [view addGestureRecognizer:tap];
         NSLog(@"tapView: %@", tap.view);
         NSLog(@"tap: %i", tap.enabled);
      }
    }
    


forループの前に画像を追加する必要があることを確認してください(サブビューの配列を使用してTapGestureを追加します)

于 2013-04-23T11:10:48.790 に答える