Подтвердить что ты не робот

Распознаватель жестов (проведите по экрану) на 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");
}
4b9b3361

Ответ 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 под инспектором атрибутов.