我正在尝试将UISwipeGestureRecognizer添加到位于我的UIViewController上的UIImageView,如果UIImageView的框架设置为屏幕边界,它可以正常工作。我需要更小的UIImageView,当我将框架设置为适当的尺寸时,它不再采用水平滑动。如何在小于全屏尺寸的任何东西上使用它?
- (void)viewDidLoad
{
[super viewDidLoad];
UIImage *image = [UIImage imageNamed:@"Star-Rating-Stroke.png"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
imageView.frame = [[UIScreen mainScreen] bounds]; // THIS WORKS !!!
// imageView.frame = CGRectMake(36,70,33,33); // THIS DOESN'T !!!
[imageView setUserInteractionEnabled:YES];
[self.view addSubview:imageView];
UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleLeftSwipe:)];
UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleRightSwipe:)];
// Setting the swipe direction.
[swipeLeft setDirection:UISwipeGestureRecognizerDirectionLeft];
[swipeRight setDirection:UISwipeGestureRecognizerDirectionRight];
// Adding the swipe gesture on image view
[imageView addGestureRecognizer:swipeLeft];
[imageView addGestureRecognizer:swipeRight];
}
- (IBAction) handleRightSwipe:(UISwipeGestureRecognizer *)swipe
{
NSLog(@"Right Swipe");
}
- (IBAction) handleLeftSwipe:(UISwipeGestureRecognizer *)swipe
{
NSLog(@"Left Swipe");
}
答案 0 :(得分:1)
如果图像视图全屏时有效,那么它也适用于(某些)较小的帧。您应该通过逐渐减小图像视图的大小来进行实验,以查看确切的问题。
无论如何,像你正在使用的那个非常小的尺寸非常有意义。 UISwipeGestureRecognizer类将具有一些内部测量,用于确定手指是否在指定方向上已经足够平移以便识别手势。如果图像视图的帧小于此(未知)值,则手势将始终失败。
作为一种替代方法,我建议您制作自己的UIGestureRecognizer子类,其作用类似于滑动手势,但需要较少的移动进行检测。如果这不是您感兴趣的事情,您可以考虑在图像视图的超视图中添加手势并跟踪触摸事件的位置,以确定它们是否发生在图像视图的边界内。