2015-08-05 2 views
7

У меня есть подкласс UIView, и добавил touchesBegan и touchesEnd методы ...touchesBegan с задержкой

В touchesBegan я установил backgroundColor от белого до зеленого, используя self.backgroundColor = [UIColor greenColor] ... в touchesEnd я сбросить от белого до белого.

Это работает, но очень медленно. Нажимая на представление, он занимает 0,5 - 1,0 сек, пока не увижу зеленый цвет.

Выбор ячейки в UITableView намного быстрее.

+0

hm, возможно, из-за неявной анимации при настройке свойств, таких как backGroudn color. Можете ли вы проверить, опаздывает ли прикосновение или только изменение цвета? – Volker

+0

Этот UIView ваш находится внутри UITableView или UIScrollView? –

+2

@Volker Хорошее мышление, но 'UIKit' отключает неявные анимации под« CALayer's »([см. Этот отличный ответ здесь] (http://stackoverflow.com/questions/4749343/when-exactly-do-implicit-animations- take-place-in-ios)), поэтому я думаю, что это не проблема. Я бы искал 'delayaysContentTouches' супервизора или что-то подобное. – Alladinian

ответ

3

Попробуйте это:

self.view.userInteractionEnabled = YES; 
    UILongPressGestureRecognizer *recognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(doCallMethod:)]; 
    recognizer.delegate = self; 
    recognizer.minimumPressDuration = 0.0; 
    [self.view addGestureRecognizer:recognizer]; 

- (void)doCallMethod:(UILongPressGestureRecognizer*)sender { 
    if(sender.state == UIGestureRecognizerStateBegan){ 
     NSLog(@"Begin"); 
     self.view.backgroundColor = [UIColor greenColor]; 
    }else if (sender.state == UIGestureRecognizerStateEnded){ 
     NSLog(@"End"); 
     self.view.backgroundColor = [UIColor whiteColor]; 
    } 
} 

Примечание: Он будет работать быстрее.

+0

ОК, это работает, но если я поместил новый вид в UITableViewCell ... i'cant пролистните ячейку, чтобы увидеть удаление button :-( – Raegtime

+0

Работает, но если представление находится внутри супервизора вида UIScrollView ... ScrollView не может прокручиваться, начиная с прокрутки внутри представления с минимальным значениемDressDuration = 0.0 ... поэтому вам нужно отрегулировать это значение, например, 0.1 ... и UIScrollView может прокручивать – Raegtime

+1

, почему у TouchBegan будет задержка? В любом случае, чтобы ускорить работу? – TomSawyer

2

Вы должны использовать распознаватель жестов, как предлагал TheBurgerShot, но я рекомендую вам UILongPressGestureRecognizer. Что-то вроде:

UILongPressGestureRecognizer *gesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(changeColor:)]; 
gesture.minimumPressDuration = 0.f; 
[self.yourView addGestureRecognizer:gesture]; 

в вашем viewDidLoad. И:

-(void) changeColor:(UIGestureRecognizer *)gestureRecognizer{ 

    if (gestureRecognizer.state == UIGestureRecognizerStateBegan){ 
     self.yourView.backgroundColor = [UIColor greenColor]; 
    } 
    else if (gestureRecognizer.state == UIGestureRecognizerStateEnded){ 
     self.yourView.backgroundColor = [UIColor whiteColor]; 
    } 
} 
+0

Знаете ли вы, почему touchsbegan имеет некоторую задержку? Жест использования может решить проблему, но не может иметь все атрибуты, такие как touchhesbegan, как множественное касание. – TomSawyer