Распознаватель жестов (проведите по экрану) на UIImageView
Я пытаюсь NSLog, когда я прокручиваю UIImageView с помощью этого кода, но по какой-то причине он не работает. Любая идея?
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
UIImage *image = [UIImage imageNamed:@"image2.png"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
imageView.frame = [[UIScreen mainScreen] bounds];
[self.view addSubview:imageView];
UISwipeGestureRecognizer *recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(rightSwipeHandle:)];
[recognizer setNumberOfTouchesRequired:1];
[imageView addGestureRecognizer:recognizer];
}
- (void)rightSwipeHandle:(UISwipeGestureRecognizer*)gestureRecognizer {
NSLog(@"right swipe");
}
Ответы
Ответ 1
Включить UIImage просмотреть взаимодействие с пользователем, которое по умолчанию отключено.
[imageView setUserInteractionEnabled:YES];
Добавление событий жестового движения
UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];
UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];
// Setting the swipe direction.
[swipeLeft setDirection:UISwipeGestureRecognizerDirectionLeft];
[swipeRight setDirection:UISwipeGestureRecognizerDirectionRight];
// Adding the swipe gesture on image view
[imageView addGestureRecognizer:swipeLeft];
[imageView addGestureRecognizer:swipeRight];
Обработка событий жестового движения
- (void)handleSwipe:(UISwipeGestureRecognizer *)swipe {
if (swipe.direction == UISwipeGestureRecognizerDirectionLeft) {
NSLog(@"Left Swipe");
}
if (swipe.direction == UISwipeGestureRecognizerDirectionRight) {
NSLog(@"Right Swipe");
}
}
Ответ 2
Обязательно добавьте imageView.userInteractionEnabled = YES;
после создания своего UIImageView.
Это позволяет пользователям взаимодействовать с вашим видом, например, краном, перетаскиванием, прокруткой или другими общими жестами.
Смотрите документацию здесь.
Ответ 3
В Swift 3
ImageView.isUserInteractionEnabled = true
let swipeGesture = UISwipeGestureRecognizer(target: self, action: #selector(self.getSwipeAction(_:)))
self.ImageView.addGestureRecognizer(swipeGesture)
func getSwipeAction( _ recognizer : UISwipeGestureRecognizer){
if recognizer.direction == .right{
print("Right Swiped")
} else if recognizer.direction == .left {
print("Left Swiped")
}
}
Ответ 4
В отличие от других UIViews
, UIImageView
, по умолчанию используется взаимодействие с пользователем disabled
. Включите эту строку в свой код, и жест будет работать как ожидалось:
imageView.userInteractionEnabled = YES;
Ответ 5
У меня возникали проблемы с этим, когда я мог заставить UISwipeGestureRecognizer работать, если бы добавил его в self.view, но не в отдельный UIImageView. Спасибо Jeff Ayan за пример кода Swift 3.
Если вы используете построитель интерфейсов, вы также можете проверить флажок "Взаимодействие с пользователем" для UIImageView под инспектором атрибутов.