2015-08-05 27 views
7

Tôi có một lớp con của UIView, và thêm touchesBegantouchesEnd phương pháp ...touchesBegan với sự chậm trễ

Trong touchesBegan, tôi đặt backgroundColor từ màu trắng sang màu xanh lá cây bằng cách sử dụng self.backgroundColor = [UIColor greenColor] ... trong touchesEnd tôi thiết lập lại màu trắng.

Nó hoạt động nhưng rất chậm. Bằng cách chạm vào chế độ xem, phải mất 0,5 - 1,0 giây cho đến khi tôi thấy màu xanh lục.

Chọn ô trong UITableView sẽ nhanh hơn nhiều.

+0

hm, có thể là do hoạt ảnh ngầm khi đặt thuộc tính như màu backGroudn. Bạn có thể kiểm tra xem cảm ứng bị trễ hay chỉ thay đổi màu sắc? – Volker

+0

UIView này của bạn xảy ra được bên trong một UITableView hoặc UIScrollView? –

+2

@Volker Nice suy nghĩ, nhưng 'UIKit' vô hiệu hóa hình ảnh động tiềm ẩn của' CALayer 'cơ bản ([xem câu trả lời tuyệt vời ở đây] (http://stackoverflow.com/questions/4749343/when-exactly-do-implicit-animations- take-place-in-ios)), vì vậy tôi đoán đây không phải là vấn đề. Tôi sẽ tìm kiếm 'delaysContentTouches' của một superview hoặc một cái gì đó tương tự. – Alladinian

Trả lời

3

Hãy thử điều này:

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

Lưu ý: Nó sẽ làm việc nhanh hơn nhiều.

+0

ok công trình này nhưng nếu tôi putmy mới Xem trong một UITableViewCell ... i'cant swipe các tế bào để xem loại bỏ button :-( – Raegtime

+0

Hoạt động, nhưng nếu xem bên trong một superView loại UIScrollView ... ScrollView không thể cuộn bằng cách bắt đầu cuộn bên trong khung nhìn với minimumDressDuration = 0.0 ... vì vậy bạn phải điều chỉnh giá trị này thành ví dụ 0.1 ... và UIScrollView có thể cuộn – Raegtime

+1

tại sao touchesBegan sẽ bị chậm trễ? – TomSawyer

2

Bạn nên sử dụng trình nhận dạng cử chỉ như TheBurgerShot đề xuất nhưng tôi khuyên bạn nên UILongPressGestureRecognizer. Một cái gì đó như:

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

trong viewDidLoad. Và:

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

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

bạn có biết tại sao không sử dụng cử chỉ có thể giải quyết vấn đề nhưng không thể có tất cả các thuộc tính như touchesbegan như nhiều liên lạc – TomSawyer

Các vấn đề liên quan