UISwipeGestureRecognizer из определенного места

поэтому у меня есть кнопка и событие TouchUpInside, уже назначенное этой кнопке. Когда кнопка нажата, она анимирует меню от нижней части экрана примерно до половины экрана.

Но я хочу, чтобы пользователь мог провести ВВЕРХ от кнопки ВНУТРИ, чтобы анимировать меню, и провести ВНИЗ от кнопки ВНУТРИ, чтобы анимировать ее.

Мне удалось понять жесты смахивания вверх и вниз, но они работают для всего представления.
поэтому, когда пользователь проводит пальцем вверх в любом месте представления, оно анимируется.

Как я могу получить LocationOfTouch и ограничить начальную точку салфетки изнутри кнопки?

Это то, что у меня есть прямо сейчас:

Я заявил:

UISwipeGestureRecognizer UpSwipe;
UISwipeGestureRecognizer DownSwipe;

И вот как я их использовал:

    public void setupGestures() {

        this.UpSwipe = new UISwipeGestureRecognizer () {
            Direction = UISwipeGestureRecognizerDirection.Up,
            Enabled = true
        };

        this.DownSwipe = new UISwipeGestureRecognizer () {
            Direction = UISwipeGestureRecognizerDirection.Down,
            Enabled = true
        };

        UpSwipe.AddTarget (animateRecentActivityView);
        DownSwipe.AddTarget (animateAwayRecentActivityView);

        this.View.AddGestureRecognizer (UpSwipe);
        this.View.AddGestureRecognizer (DownSwipe);
    }

person ᴛʜᴇᴘᴀᴛᴇʟ    schedule 14.09.2014    source источник
comment
Вы добавляете распознаватель жестов в представление, что, если вы добавите его к кнопке?   -  person valdetero    schedule 14.09.2014
comment
Я пробовал это, но чтобы это работало, весь свайп должен быть внутри кнопки, и, конечно, кнопка слишком мала для этого. Он не распознает это как пролистывание.   -  person ᴛʜᴇᴘᴀᴛᴇʟ    schedule 14.09.2014
comment
На самом деле моя кнопка была внутри собственного представления, и поэтому она не работала. Я поместил кнопку за пределы представления и применил жест смахивания к кнопке, и это сработало. Спасибо   -  person ᴛʜᴇᴘᴀᴛᴇʟ    schedule 14.09.2014
comment
Вместо этого вы можете использовать только один распознаватель жестов и проверять его состояние UIGestureRecognizerStateChanged и продолжать анимировать свое представление вместе с изменениями местоположения, полученными методом locationInView:, каждый раз, когда оно изменяется.   -  person dispatchMain    schedule 14.09.2014


Ответы (2)


Как я могу получить LocationOfTouch и ограничить начальную точку салфетки изнутри кнопки?

В чистом Cocoa touch вы можете переопределить метод UIView

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

параметр "касания" содержит набор UITouch

вызвать метод UITouch

- (CGPoint)locationInView:(UIView *)view

вы получаете местоположение точки соприкосновения

person dopcn    schedule 14.09.2014
comment
Это может работать, чтобы получить местоположение PointF касания, но как я могу использовать это, чтобы заставить его работать с swipeGesture? Я хочу, чтобы прикосновение пользователя было внутри кнопки, и когда они прокручивают вверх, меню анимируется. Но конечное местоположение смахивания не будет на кнопке, потому что кнопка слишком мала для всего свайпа. - person ᴛʜᴇᴘᴀᴛᴇʟ; 14.09.2014

Я действительно смог понять это. Моя кнопка была внутри представления, и хотя я добавил к кнопке жест смахивания, почему-то это не сработало. Как только я удалил его из представления, добавление swipeGesture непосредственно к кнопке работало отлично.

        this.UpSwipe = new UISwipeGestureRecognizer () {
            Direction = UISwipeGestureRecognizerDirection.Up,
            Enabled = true
        };

        this.DownSwipe = new UISwipeGestureRecognizer () {
            Direction = UISwipeGestureRecognizerDirection.Down,
            Enabled = true
        };

        UpSwipe.AddTarget (animateRecentActivityView);
        DownSwipe.AddTarget (animateAwayRecentActivityView);

        btnAct_HomeRecentActivity.AddGestureRecognizer (UpSwipe);
        btnAct_HomeRecentActivity.AddGestureRecognizer (DownSwipe);
person ᴛʜᴇᴘᴀᴛᴇʟ    schedule 14.09.2014