Tôi đang cố gắng phát hiện tốc độ di chuyển cảm ứng và tôi không phải lúc nào cũng nhận được kết quả mong đợi. (thêm: Tốc độ tăng vọt quá nhiều) Có ai có thể phát hiện ra nếu tôi đang làm điều gì đó sôi nổi hoặc đề xuất cách làm tốt hơn?Phát hiện tốc độ di chuyển UITouch
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
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 = distanceBetweenPoints(location,prevLocation);
NSTimeInterval timeSincePrevious = event.timestamp - self.previousTimestamp;
CGFloat speed = distanceFromPrevious/timeSincePrevious;
self.previousTimestamp = event.timestamp;
NSLog(@"dist %f | time %f | speed %f",distanceFromPrevious, timeSincePrevious, speed);
}
Này ... tôi đang gặp sự cố khi triển khai điều này. Là một phần chức năng lambda của mục tiêu-c? Tôi cần gì để thực hiện nó? tia – dizy
Không ... đó là hằng số bạn chỉ định chính mình. Càng gần đến 1, bạn càng đặt trọng lượng lên giá trị mới nhất. So sánh với trung bình số học của các giá trị n. Mỗi giá trị mới có trọng số là 1/n. Đối với hàm mũ, đặt lambda = 2/(n + 1) trong đó n là giá trị số học tương đương. Vì vậy, giá trị mới là trọng số 2/(n + 1) thay vì 1/n, và sau đó trung bình di chuyển hiện tại được thu nhỏ lại bởi (1-lambda) = (n-1)/(n + 1) và hai là thêm. Clearer? – Jim