检测UIImageView上的轻击手势 IOS

10
我做错了什么?我无法检测到UIImageview上的点击。 UIImageView *myImage 在Storyboard中创建。代码文件在这里:https://drive.google.com/folderview?id=0B2jWw-2wZC52NDBFZ2lXUTUzQXM&usp=sharing 文件:ViewController.h
#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@property (strong, nonatomic) IBOutlet UIImageView *myImage;

@end

文件:ViewController.m

#import "ViewController.h"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    UIGestureRecognizer *tapGestureRecognizer = [[UIGestureRecognizer alloc] initWithTarget:self action:@selector(tappedImage:)];
    [self.myImage addGestureRecognizer:tapGestureRecognizer];
    self.myImage.userInteractionEnabled = YES; // default is no for UIImageView

}

- (void)tappedImage:(UIGestureRecognizer *)gestureRecognizer {
    //UIImageView *myImage = (UIImageView *)gestureRecognizer.view;
    // do stuff;
    NSLog(@"it works");
}


@end

1
我通过将UIGestureRecognizer替换为UITapGestureRecognizer来解决了它!谢谢大家! - user1172579
5个回答

23

我认为你应该使用UITapGestureRecognizer类,如下所示:

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapDetected)];
singleTap.numberOfTapsRequired = 1;
preArrowImage.userInteractionEnabled = YES;
[preArrowImage addGestureRecognizer:singleTap];

-(void)tapDetected{
NSLog(@"single Tap on imageview");

}

8
您只需更改.h文件即可。
 #import <UIKit/UIKit.h>

 @interface ViewController : UIViewController<UIGestureRecognizerDelegate>

@property (strong, nonatomic) IBOutlet UIImageView *myImage;

@end

然后是 .m 文件。
 #import "ViewController.h"
 @interface ViewController ()

 @end

 @implementation ViewController

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

UIGestureRecognizer *tapGestureRecognizer = [[UIGestureRecognizer alloc] initWithTarget:self action:@selector(tappedImage:)];
tapgestureRecognizer.delegate = self;
[self.myImage addGestureRecognizer:tapGestureRecognizer];
self.myImage.userInteractionEnabled = YES; // default is no for UIImageView

}

 - (void)tappedImage:(UIGestureRecognizer *)gestureRecognizer {
//UIImageView *myImage = (UIImageView *)gestureRecognizer.view;
// do stuff;
NSLog(@"it works");
 }


@end

我将连接tapgestureRecognizer到代理。你只需要尝试这段代码。

亲爱的Albin,你的方法不起作用。也许你可以尝试下载我的代码。请在这里找到它:https://drive.google.com/folderview?id=0B2jWw-2wZC52NDBFZ2lXUTUzQXM&usp=sharing - user1172579

3
 UIGestureRecognizer *sliderTapview1 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tappedImage:)];
    [img addGestureRecognizer:sliderTapview1];

   img.userInteractionEnabled = YES;

只需替换这部分内容。


2
即使您在代码中启用了它,请尝试进入您的Storyboard并检查图像视图上的“启用用户交互”,您的代码似乎没问题,尝试这样做并告诉我。
另外,想到一点,尝试在分配tapgesture之前启用imageview上的交互 :)

0

看起来一切都很好,尝试像这样做:[myImage userInteractionEnabled:YES],并在图像视图中的界面构建器中删除“自动布局”和“启用用户交互”。


亲爱的Yashwanth,按照您的建议,结果相同。请在此处找到代码:https://drive.google.com/folderview?id=0B2jWw-2wZC52NDBFZ2lXUTUzQXM&usp=sharing - user1172579

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接