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

Коснитесь события на UIView

Есть ли у кого-нибудь образец кода для обнаружения касаний динамически созданного UIView? Я нашел несколько ссылок на touchBegan, но не могу понять, как его реализовать...

4b9b3361

Ответ 1

Весьма общий способ доступа - это переопределить эти методы в пользовательском подклассе UIView:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event

Официальные документы для этих методов находятся в разделе "Ответы на события касания" в документы класса UIResponder (UIView наследует эти методы, поскольку это подкласс UIResponder). Более длинные и более вводные документы можно найти в Руководство по обработке событий для iOS.

Если вы просто хотите обнаружить кран (touch-down, затем touch-up в вашем представлении), проще всего добавить UIButton в качестве подсмотра вашего представления и добавить свой собственный пользовательский метод в качестве целевого/для этой кнопки. Пользовательские кнопки по умолчанию невидимы, поэтому это не повлияет на внешний вид вашего представления.

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

Ответ 2

Создайте событие касания с UIAnimation на UIView, вы можете управлять касаниями UIView где угодно.

Следующий код: здесь self.finalScore - это UIView, а чаша - UIImageView. Я обрабатываю

событие касания на UIImageView, оно присутствует внутри UIView.

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

UITouch *touch1 = [touches anyObject];
CGPoint touchLocation = [touch1 locationInView:self.finalScore];
CGRect startRect = [[[cup layer] presentationLayer] frame];
CGRectContainsPoint(startRect, touchLocation);

[UIView animateWithDuration:0.7 
                      delay:0.0 
                    options:UIViewAnimationCurveEaseOut 
                 animations:^{cup.transform = CGAffineTransformMakeScale(1.25, 0.75);} 
                 completion:^(BOOL finished) {  
                     [UIView animateWithDuration:2.0 
                                           delay:2.0 
                                         options:0
                                      animations:^{cup.alpha = 0.0;} 
                                      completion:^(BOOL finished) {
                                          [cup removeFromSuperview];
                                          cup = nil;}];                 
                 }];

}

Подобно UITapGestureRecognizer - это еще один способ обработки событий касания на UIView....

UITapGestureRecognizer *touchOnView = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(releaseButAction)] autorelease];

// Set required taps and number of touches
[touchOnView setNumberOfTapsRequired:1];
[touchOnView setNumberOfTouchesRequired:1];

// Add the gesture to the view
[[self view] addGestureRecognizer:touchOnView];

Ответ 3

Создайте свой собственный UIView из подкласса, созданного путем наследования UIView, и переопределите следующий метод внутри подкласса,

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

}

Ответ 4

Мой метод просто меняет класс UIView на UIControl в InterfaceBuilder IdentityInspector, тогда ConnectionsInspector мгновенно получит событие касания к крюку.

изменения нулевого кода.

Ответ 5

Вместо того, чтобы захватывать сенсорный жест, я предлагаю изменить родительский класс UIView на UIControl, чтобы он мог обрабатывать событие touchUpInside

From:

@interface MyView : UIView

To:

@interface MyView : UIControl

а затем добавьте эту строку для просмотра -

    [self addTarget:self action:@selector(viewTapped:) forControlEvents:UIControlEventTouchUpInside]; 

Так как жест может создавать проблемы при прокрутке.

Ответ 6

С помощью recongnizer для прослушивания вы можете легко поймать события касания.

Найти один из компонентов библиотеки компонентов в раскадровке:

введите описание изображения здесь

Например, перетащите указатель Gothure Gesture Recognizer в ваше представление. Он не показан в представлении UI. Вы можете найти его из схемы документа на левой панели в раскадровке:

введите описание изображения здесь

Последний шаг - связать его (с помощью управления) с представлением в качестве делегата, на котором отслеживается касание, и перетащить управление в класс контроллера вида в качестве действия. Вот изображение связей ссылок.

введите описание изображения здесь

и код действия:

@IBAction func tapAction(_ sender: Any) {
    // touch is captured here.
}