Xử lý Touch nâng cao trong iOS9
Cùng với các thiết bị mới được Apple giới thiệu như iPhone6s, 6s+ và iPad Pro thì các công nghệ là độ trễ thấp và xử lý touch phân giải cao cũng trở lên là các bước tiến quan trọng của apple. Với công nghệ mới nhất thì nếu ứng dụng bạn chỉ chạy được 60 FPS (khung hình trên giây) thì với các thiết ...
Cùng với các thiết bị mới được Apple giới thiệu như iPhone6s, 6s+ và iPad Pro thì các công nghệ là độ trễ thấp và xử lý touch phân giải cao cũng trở lên là các bước tiến quan trọng của apple. Với công nghệ mới nhất thì nếu ứng dụng bạn chỉ chạy được 60 FPS (khung hình trên giây) thì với các thiết bị mới được giới thiệu trên hệ điều hành iOS9 nó có thể quét được 120 FPS gấp đôi so với bình thường cùng với nền tảng là 3D touch. iOS đã giới thiệu chức năng mới cho UIEvent để giảm độ chễ và cải thiện độ phân giải tạm thời.
Touch Coalescing
Tính năng đầu tiên được giới thiệu chính là TouchCoalescing. Nếu ứng dụng của bạn lấy mẫu các điểm chạm bằng việc overridden phương thức touchesMoved(). Tất cả các điểm chạm được lấy mẫu mà bạn lấy được đều là 60 trên giây hoặc nếu nó có nhiều tính toán phức tạp trên main thread thì số lượng này có thể ít hơn. TouchCoalescing cho phép bạn truy cập ngay lập tức đến các touch. Ví dụ, TouchCoalescing cho phép bạn vẽ một đường cong mịn bao gồm một số điểm khi mà bạn chỉ nhận được một sự kiện từ UIEvent. Mỗi đối tượng UITouch đều có chứa thông tin về location của nó và một con trỏ đến đối tượng trước của nó. Như vậy với số lần quét gấp đôi thì Coalescing cho số lượng UITouch gấp đôi và việc liên kết giữa các điểm ấy cũng dễ dàng hơn mịn hơn rất nhiều so với Touch thông thường. Để vẽ 1 đường cong với các touch thông thường chúng ta cần dùng đoạn code sau:
for touch in touches { let line = lineForTouch(touch) addTouchSample(touch, toLine: line) }
Tuy nhiên để sử dụng Coalescing chỉ chúng ta chỉ cần sử dụng phương thức đã được iOS9 thêm vào cho UIEvent là coalescedTouchesForTouch(touch). Phương thức này sẽ trả về mảng các UITouch được lấy ra khi quét các touch với tần số 120 lần trên giây so với với 60 lần ở các phiên bản iOS cũ hơn.
for touch in touches { let line = lineForTouch(touch) for coalescedTouch in event.coalescedTouchesForTouch(touch) { addTouchSample(coalescedTouch, toLine: line) } }
Như vậy số lượng các đối tượng UITouch được add vào đường thẳng chắc chắn sẽ nhiều hơn so với đoạn code bên trên. Như thế với đường cong được vẽ ra sẽ mịn hơn hơn so với đường cong được vẽ ra bởi đoạn code bên trên.
Touch Prediction
Ngoài việc có tốc độ quét các touch nhanh gấp đôi so với các phiên bản iOS trước đó thì ở phiên bản này iOS9 còn cung cấp thêm tính năng dự đoán các touch có khả năng sẽ nằm trên đường vẽ của người dùng. Dự đoán này chính là tiếp tuyến của đường cong tại vị trí của Touch được dự đoán. Việc dự đoán được trước khoảng sẽ có thể vẽ vào thì chúng ta sẽ có khả năng xác định nhanh vùng cần quét để lần quét tiếp theo sẽ quét nhanh khu vực có khả năng sẽ có touch. Tính năng cũng là tính năng mới được cung cấp cho UIEvent. Với phương thức predictedTouchesForTouch(touch) của UIEvent, chúng ta sẽ lấy ra được tập các touch được dự đoán trước thuộc các touch đang có trên màn hình. Ngoài ra chúng ta nếu thêm các TouchPredict vào đường cong thì có nhiều điểm chắc chắn sẽ không thuộc đường cong sau khi vẽ xong, vậy nên chúng ta cần xoá các điểm đã thêm vào khi được dự đoán ở điểm touch liền trước đó. Sau khi quét xong chúng ta sẽ có 1 đường được vẽ từ touch begin đến touch end và một số điểm được dự đoán trước
for touch in touches { let line = lineForTouch(touch) for coalescedTouch in event.coalescedTouchesForTouch(touch) { addTouchSample(coalescedTouch, toLine: line) } removePredictedSamplesFromLine(line) for predictedTouch in event.predictedTouchesForTouch(touch) { addPredictedTouchSample(predictedTouch, toLine: line) } }
Việc kết hợp TouchCoalescing và TouchPrediction sẽ phù hợp tốt với các ứng dụng đòi hỏi có độ trễ thấp và phân giải cảm ứng cao. Với tốc độ 120 FPS thì ứng dụng hoàn toàn có thể xử lý được hầu hết các cử chỉ của người dùng ngoài ra còn có thể dự đoán trước được một số các cử chỉ trước đó. Điều này khiến cho người dùng có cảm giác thật hơn, cảm ứng mịn hơn rất phù hợp với các cử chỉ trong game hoặc đồ hoạ. Hai tính năng này chính là một bước tiến khá lớn trong iOS9 cùng với các công nghệ đã được giới thiệu trong các bài viết trước thì nó giúp cho người dùng trải nghiệm được cảm giác thật nhất trong khi sử dụng ứng dụng.