2009-08-06 29 views
7

Ngạc nhiên khi bạn biết rằng hệ điều hành iPhone làm cho một sự chậm trễ nhân tạo khoảng 0,25 giây sau một touchesBegan: occures. Điều này là để kiểm tra xem người dùng có ý định di chuyển hay không. Nếu vùng đồng bằng di chuyển đủ đáng kể trong thời gian này, một chuỗi touchesMoved: bắt đầu.Có thể kéo điểm tiếp xúc ngay sau khi chạm vàoBegan: được gọi không?

Nhưng khi bạn muốn thực hiện hành vi cảm ứng xúc giác trong ứng dụng của mình, bạn có thể không muốn bất kỳ sự chậm trễ nào. Trông thật xấu xí! Bạn bắt đầu di chuyển một cái gì đó, và trong 0,3 giây không có gì xảy ra. Sau đó, BANG và toàn bộ điều bắt đầu di chuyển với một cái lật lớn. Điều đó xảy ra mỗi khi một chuỗi liên lạc mới với chuyển động bắt đầu. Điều này nghiêm trọng sucks. Tất nhiên trong một số trường hợp nó là cần thiết bởi vì bạn có thể muốn xác định nếu người dùng thực sự có ý định di chuyển. nhưng không phải như vậy trên thanh trượt tùy chỉnh-xây dựng hoặc loại điều khiển xúc giác khác hoạt động bằng cách theo dõi các cử động chạm.

Vì vậy, sau khi tôi đã tìm ra rằng điều này đang xảy ra cố ý bởi hệ điều hành iPhone, tôi muốn biết làm thế nào để khắc phục vấn đề này. Tôi không thể dự đoán chuyển động vì người dùng có thể di chuyển sang trái hoặc sang phải. Tôi không biết điều này trong touchesBegan :. 0,3 giây là đủ để làm cho ứng dụng trông không phản hồi.

Tuy nhiên, có vẻ như là hy vọng: Convertbot hoàn toàn không có vấn đề gì với điều đó. Bánh xe quay ngay lập tức khi chạm vào và di chuyển nó. Không có độ trễ, không chậm trễ. Tôi hỏi trong blog của họ như thế nào họ đã làm nó, nhưng không có phản ứng nào được nêu ra.

Tôi hy vọng có cách để kéo các tọa độ theo cách thủ công ra khỏi hệ thống. Khi touchesBegan :, Tôi sẽ bắt đầu một khoảng thời gian kéo tại 60Hz cho đến khi touchesMoved: thực hiện hành động.

Vì vậy, câu hỏi lớn nhất trên hành tinh này: "Làm thế nào là có thể"?

+0

Tôi muốn kiếm tiền từ số tiền này. Nhưng có vẻ như tôi không thể? –

+0

"BANG! Toàn bộ điều bắt đầu di chuyển với một lật lớn!" Tôi đang tìm một giải pháp cho điều này là tốt. – bobobobo

+0

Chúng tôi đã bị cắn bởi điều này tại một số điểm tôi nghĩ. Tôi hỏi một câu hỏi về điều này một thời gian trước đây, nhưng không nhận ra đó là sự kiện touchesMoved bị trì hoãn gây ra sự giật mình trong hoạt hình của tôi (tôi nghĩ đó là mã dựng hình thực tế). Điều thực sự khiến tôi không hài lòng là UIScrollView nhận được sự kiện di chuyển ngay lập tức - chúng cực kỳ mượt mà. – U62

Trả lời

4

Nếu người trả lời của bạn ở trong chế độ UIScrollView, hãy đảm bảo bạn đặt cài đặt DelayContentTouches của scrollView thành NO. Điều này sẽ làm việc cho cả hai phương thức chạm của UIResponder: Phương thức và phương thức beginTrackingWithTouch: của UIControl.

0

Nếu lớp con UIView của bạn là chế độ xem con của UITableView hoặc một trong con cháu của nó, chẳng hạn như UITableView, bạn phải delaysContentTouches đến NO trên chế độ xem cuộn hoặc chế độ xem bảng. Bằng cách đó, nó sẽ ngay lập tức gửi liên lạc đầu tiên đến số touchesBegain: của bạn.

Tuy nhiên, tôi nghĩ rằng ConvertBot không sử dụng UIScrollView ở tất cả: nó có thể là một UIView tùy chỉnh thực hiện phần xoay chính nó. Nếu giao diện người dùng của bạn không yêu cầu cuộn, thì chỉ cần đặt lớp con UIView của bạn trong chế độ xem nội dung và bạn không phải đặt delaysContentTouches vì không có chế độ xem cuộn để chặn sự kiện chạm.

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