2012-04-22 20 views
11

Làm cách nào để có được Tốc độ và hướng di chuyển ngón tay trong chức năng cảm ứng?UITouch chạm vào Hướng và tốc độ ngón tay được yêu thích

Tôi muốn có tốc độ ngón tay và hướng ngón tay và áp dụng nó theo chuyển động hướng lớp UIView và tốc độ hoạt ảnh.

tôi đọc liên kết này nhưng tôi không thể hiểu được những câu trả lời, ngoài ra nó không được giải thích làm thế nào tôi có thể phát hiện sự chỉ đạo:

UITouch movement speed detection

cho đến nay, tôi đã cố gắng mã này:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *anyTouch = [touches anyObject]; 
    CGPoint touchLocation = [anyTouch locationInView:self.view]; 
    //NSLog(@"touch %f", touchLocation.x); 
    player.center = touchLocation; 
    [player setNeedsDisplay]; 
    self.previousTimestamp = event.timestamp;  
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 
    CGPoint location = [touch locationInView:self.view]; 
    CGPoint prevLocation = [touch previousLocationInView:self.view]; 
    CGFloat distanceFromPrevious = [self distanceBetweenPoints:location :prevLocation]; 
    NSTimeInterval timeSincePrevious = event.timestamp - previousTimestamp; 

    NSLog(@"diff time %f", timeSincePrevious); 
} 

Trả lời

17

Hướng sẽ được xác định từ các giá trị của "vị trí" và "vị trí cao nhất" trong chạm được Chọn. Cụ thể, vị trí sẽ chứa điểm mới của liên lạc. Ví dụ:

if (location.x - prevLocation.x > 0) { 
    //finger touch went right 
} else { 
    //finger touch went left 
} 
if (location.y - prevLocation.y > 0) { 
    //finger touch went upwards 
} else { 
    //finger touch went downwards 
} 

Bây giờ chạm vàoMoved sẽ được gọi nhiều lần cho một chuyển động ngón tay nhất định. Nó sẽ là chìa khóa cho mã của bạn để so sánh giá trị ban đầu khi ngón tay chạm vào màn hình lần đầu tiên, với giá trị của CGPoint khi chuyển động cuối cùng đã hoàn thành.

+0

hãy kiểm tra này, tôi cũng đang so sánh chạm, nhưng trở thành của nó chậm http://stackoverflow.com/questions/21952274/how- để chỉnh sửa một cách hiệu quả-theo yêu cầu – Ranjit

+0

Vui lòng chỉnh sửa nhận xét về hướng lên và xuống, chúng đối diện – Garnik

5

tại sao không chỉ dưới đây như một biến thể ứng phó obuseme của

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ 

     UITouch *aTouch = [touches anyObject]; 
     CGPoint newLocation = [aTouch locationInView:self.view]; 
     CGPoint prevLocation = [aTouch previousLocationInView:self.view]; 

     if (newLocation.x > prevLocation.x) { 
       //finger touch went right 
     } else { 
       //finger touch went left 
     } 
     if (newLocation.y > prevLocation.y) { 
       //finger touch went upwards 
     } else { 
       //finger touch went downwards 
     } 
} 
+0

đừng quên '[super touchesMoved: chạm vớiEvent: event]'! : D – taber