У меня есть два решения.
- Для анимации uiview, пожалуйста, напишите новый класс, который унаследован от класса UIView, и реализуйте делегаты касания вместо того, чтобы писать Gustures для обработки анимации (если делегаты касания не запускаются в текущем классе).
2.Я успешно удалил UILongPressGestureRecognizer после его запуска один раз.
Пожалуйста, используйте приведенный ниже код. Спросите меня, если у вас есть какие-либо вопросы
Шаги, которые я сделал
Я добавил UIView как "myView" в мой основной вид при загрузке основного вида.
Я присвоил тег myView (вы можете указать 1,2,3… и т. Д.), Чтобы отличить постукивающее представление от подпредставлений основного вида.
Назначил жест myILongPressGestureRecognizer для myView и назначил цель как метод "moveMe".
Когда пользователь нажал на myView long, сработает метод «moveMe».
Затем я итерировал подпредставления mainView с условием Tag == 1
Я удалил UILongPressGestureRecognizer из подпредставления. Как мы можем знать, основной вид пометки Tagged 1 - это myView.
Итак, NSLog (@ "жест удален"); и NSLog (@ "moveMe"); будет входить в консоль только один раз.
NSLog (@ "touchesBegan"); будет запускаться первым вместо вызова метода moveMe.
Тогда NSLog (@ "touchesBegan"); будет срабатывать всегда после удаления жеста. Метод "moveMe" никогда не сработает.
Код
- (void)viewDidLoad {
//Adding to UIView to main view when application is loading.
UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(20, 20, 80, 80)];
myView.backgroundColor = [UIColor viewFlipsideBackgroundColor];
myView.tag = 1; //adding a tag to identify it.
//Adding Long Press Gesture to the UIView.
UILongPressGestureRecognizer *myGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(moveMe:)];
[myView addGestureRecognizer:myGesture];
[myGesture release];
myGesture = nil;
[self.view addSubview:myView];
[myView release];
myView = nil;
[super viewDidLoad];
}
//Method to trigger when user pressed long on the added UIView.
-(void)moveMe:(id)sender
{
for (UIView *subViews in [self.view subviews])
{
if (subViews.tag == 1) {
[subViews removeGestureRecognizer:sender];
NSLog(@"gesture removed");
}
}
NSLog(@"moveMe");
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"touchesBegan");
}
или, пожалуйста, обратитесь Отключить распознаватель жестов iOS