Как настроить сенсорный обработчик UIView без создания подклассов - PullRequest
3 голосов
/ 30 августа 2010

Как мне захватить события касания, такие как - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event, без создания подкласса UIView или с помощью UIViewControllers.

Что происходит, так это то, что у меня есть простой UIView, созданный программно, и мне нужно обнаружить основные события касания.

Ответы [ 4 ]

4 голосов
/ 30 августа 2010

Если вы пишете свое приложение для iOS 4, используйте UIGestureRecognizer.Вы можете делать то, что вы хотите.Распознавать жесты без подклассов.

В противном случае подклассы - это путь.

1 голос
/ 01 января 2014

CustomGestureRecognizer.h

#import <UIKit/UIKit.h>

@interface CustomGestureRecognizer : UIGestureRecognizer
{
}

- (id)initWithTarget:(id)target;

@end

CustomGestureRecognizer.mm

#import "CustomGestureRecognizer.h"
#import <UIKit/UIGestureRecognizerSubclass.h>

@interface CustomGestureRecognizer()
{
}
@property (nonatomic, assign) id target;
@end

@implementation CustomGestureRecognizer

- (id)initWithTarget:(id)target
{
    if (self =  [super initWithTarget:target  action:Nil]) {
        self.target = target;
    }
    return self;
}

- (void)reset
{
    [super reset];
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesBegan:touches withEvent:event];

    [self.target touchesBegan:touches withEvent:event];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesMoved:touches withEvent:event];

    [self.target touchesMoved:touches withEvent:event];
}

- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesEnded:touches withEvent: event];

    [self.target touchesEnded:touches withEvent:event];
}
@end

Использование:

CustomGestureRecognizer *customGestureRecognizer = [[CustomGestureRecognizer alloc] initWithTarget:self];
[glView addGestureRecognizer:customGestureRecognizer];
1 голос
/ 30 августа 2010

Не знаю, почему вы не хотите использовать обычный метод создания подкласса UIView для захвата сенсорных событий, но если вам действительно нужно сделать что-то странное или подлое, вы можете захватить все события (включая сенсорные события) до того, какони отправляются по иерархии представления путем захвата / обработки метода sendEvent: на уровне UIWindow.

1 голос
/ 30 августа 2010

Просто нет причин не делать этого. Если вы создаете подкласс и ничего не добавляете, это просто UIView, называемый другим именем. Все, что вы делаете, это перехватываете те функции, которые вас интересуют. Не забывайте, что вы можете сделать [super touchesBegan:touches] внутри своего подкласса touchesBegan, если не хотите, чтобы респонденты в цепочке тоже получали эти события. 1004 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...