2015-08-05 12 views
7

Ich habe eine Unterklasse von UIView, und hinzugefügt, um die touchesBegan und touchesEnd Methoden ...touchesBegan mit Verzögerung

In touchesBegan ich die backgroundColor von weiß auf grün self.backgroundColor = [UIColor greenColor] durch die Verwendung ... in der touchesEnd setze ich die Farbe zu weiß.

Es funktioniert aber sehr langsam. Wenn Sie auf die Ansicht tippen, dauert es 0,5 - 1,0 Sekunden, bis ich die grüne Farbe sehe.

Die Auswahl einer Zelle in einem UITableView ist viel schneller.

+0

hm, könnte auf eine implizite Animation beim Festlegen von Eigenschaften wie backGroudn Farbe zurückzuführen sein. Kannst du prüfen, ob die Berührung zu spät ist oder nur der Farbwechsel? – Volker

+0

Diese UIView von Ihnen ist zufällig in einem UITableView oder einem UIScrollView? –

+2

@Volker Schönes Denken, aber "UIKit" deaktiviert implizite Animationen der zugrunde liegenden 'CALayer's (http://stackoverflow.com/questions/4749343/when-exactly-do-implicit-animations- take-place-in-ios)), also denke ich, das ist nicht das Problem. Ich würde nach "delaysContentTouches" einer Superview oder ähnlichem suchen. – Alladinian

Antwort

3

Try this:

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]; 
    } 
} 

Hinweis: Es ist mehr schneller arbeiten.

+0

ok das funktioniert, aber wenn ich putmy neue Ansicht in einem UITableViewCell ... icant Swipe die Zelle, um die Entfernung zu sehen button :-( – Raegtime

+0

Funktioniert, aber wenn die Ansicht innerhalb einer SuperView von Art UIScrollView ist ... kann die ScrollView nicht scrollen indem sie den Scroll innerhalb der View mit minimumDressDuration = 0.0 beginnt ... also muss dieser Wert zB angepasst werden 0.1 ... und die UIScrollView kann scrollen – Raegtime

+1

warum touchesBegan Verzögerung haben wird? Sowieso, um zu beschleunigen? – TomSawyer

2

Sie sollten eine Gestenerkennung als TheBurgerShot vorgeschlagen, aber ich empfehle Ihnen eine UILongPressGestureRecognizer. Etwas wie:

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

in Ihrem viewDidLoad. Und:

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

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

wissen Sie warum touchsban hat einige Verzögerung? verwenden Sie Geste kann das Problem lösen, aber kann nicht alle Attribute wie touchesbegangen wie mehrere Touch haben – TomSawyer