2013-06-27 33 views
10

Tôi muốn phát hiện vị trí cảm ứng (ban đầu) trong UIScrollView của tôi khi người dùng bắt đầu kéo. Tôi đã googled vấn đề này và nhiều người dường như đấu tranh với vấn đề này rất. Bây giờ, trong khi tôi vẫn không thể quấn đầu của tôi xung quanh lý do tại sao Apple sẽ không cho phép người dùng truy cập thông tin liên lạc trong chế độ xem cuộn, tôi không thể không tự tìm ra giải pháp. Tuy nhiên tất cả cố gắng của tôi đều thất bại, vì vậy tôi muốn hỏi bạn.Phát hiện vị trí cảm ứng trên UIScrollView?

Dưới đây là những gì tôi nghĩ sẽ làm việc:

tôi thiết lập một UIPanGestureRecognizer như thế này trong lớp con UIScrollView của tôi và thêm nó vào recognizers cử chỉ của nó:

UIPanGestureRecognizer *tapDrag = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(touchedAndDragged:)]; 
tapDrag.cancelsTouchesInView = NO; 
tapDrag.delegate = self; 
[self addGestureRecognizer:tapDrag]; 

Và phương pháp tương ứng:

-(void)touchedAndDragged:(UIPanGestureRecognizer*)t{ 

    CGPoint loc = [t locationInView:self]; 
    //do something with location (that is exactly what I need) 
    //... 

    //Now DISABLE and forward touches to scroll view, so that it scrolls normally 
    t.enabled = NO; 
    /**** 
    ????? 
    *****/ 

} 

Như được chỉ ra bởi các bình luận, tôi muốn vô hiệu hóa cử chỉ pan sau khi tôi có điểm và sau đó vô hiệu hóa trình nhận dạng (trong khi STILL kéo!) và "chuyển" các lần chạm vào chế độ xem cuộn của tôi để người dùng có thể cuộn bình thường. Điều đó có khả thi không? Có giải pháp nào khác không?

Trả lời

31

Vâng UIScrollView đã có sẵn cử chỉ xoay mà bạn có thể nhấn vào. Việc sử dụng sẽ đơn giản như việc thiết lập lớp của bạn làm đại biểu của chế độ xem cuộn của bạn (để sử dụng scrollViewWillBeginDragging) và sử dụng địa chỉ của lệnh của UIPanGestureRecognizer -locationInView: để xác định vị trí cảm ứng.

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 
{ 
    CGPoint location = [scrollView.panGestureRecognizer locationInView:scrollView]; 
    NSLog(@"%@",NSStringFromCGPoint(location)); 
} 
+0

là nó có thể phát hiện nếu cuộn này là tại một số vị trí xx sau đó scrollView di chuyển hoặc liên lạc sẽ không được kích hoạt? giả sử tôi có hai chế độ xem, bản đồ và một bảng điều khiển bên dưới bản đồ trong chế độ xem cuộn, tôi không muốn chế độ xem cuộn để kích hoạt đại biểu của nó khi tôi chạm vào bản đồ và bản đồ –

0

Tại sao bạn không lấy vị trí bắt đầu ở -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event sẽ thuận tiện và hiệu quả hơn.

+3

Tôi hoàn toàn nhận thức được các chức năng cảm ứng và trên thực tế, tôi đã cố gắng triển khai chúng, nhưng chúng hoàn toàn không được gọi. –

+0

Không tương thích với người dùng được bật. Tuy nhiên vô hiệu hóa nó và nó sẽ. Nhưng sau đó bạn sẽ không thể tương tác với bất kỳ childobjects của nó ... – Philip

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