19/08/2019, 07:54

SWIFT – Cách tạo Popover Card View Animation sử dụng UIPropertyAnimator

Người viết: Nguyen Duc Huy B Bài viết hôm nay mình sẽ giới thiệu cho các bạn cách tạo Popover Card View được sử dụng khá phổ biến trong các app hiện nay như Voice Memos, Map hay Stocks…, cho phép người dùng có thể mở rộng hoặc ẩn thông tin ở nền trước, đồng thời thông tin ở ...

Cách tạo Popover Card View

Người viết: Nguyen Duc Huy B

Bài viết hôm nay mình sẽ giới thiệu cho các bạn cách tạo Popover Card View được sử dụng khá phổ biến trong các app hiện nay như Voice Memos, Map hay Stocks…, cho phép người dùng có thể mở rộng hoặc ẩn thông tin ở nền trước, đồng thời thông tin ở nền sau sẽ được làm mờ đi.

Cách tạo Popover Card View Cách tạo Popover Card View Cách tạo Popover Card View

Để có thể tạo animation cho Card View thì ta cần phải sử dụng UIViewPropertyAnimator, object hỗ trợ animation được Apple cho ra mắt tại WWDC 2016.

Sau đây là định nghĩa về UIViewPropertyAnimator:

A class that animates changes to views and allows the dynamic modification of those animations.

Có thể hiểu ngắn gọn là UIViewPropertyAnimator cho phép bạn tạo ra animation cho sự thay đổi của views, mà điển hình là sự thay đổi về vị trí của chúng.

Bài viết này mình sẽ không đi sâu vào UIViewPropertyAnimator. Các bạn muốn tìm hiểu thêm thì có thể tham khảo links này:

https://medium.com/@NilStack/swift-world-uiviewpropertyanimator-exploration-part-1-d3f4ab8901a8

Cách tạo Popover Card View

Bước 1: Setting up the view

Đầu tiên, mình sẽ tạo một UIViewController cùng file XIB view và đặt tên là CardViewController. Các bạn cũng có thể dùng storyboard hoặc code tùy theo từng project cụ thể:Cách tạo Popover Card View

CardViewController view size cần phải set chế độ freeform để nó có thể resized như một view độc lập mà không kề thừa từ các iOS Device properties.Cách tạo Popover Card View

Cách tạo Popover Card View

Trong CardViewController.xib, ta sẽ tạo ra giao diện giống như dưới đây, với view màu trắng là handleArea – được sử dụng để resize view.

Cách tạo Popover Card View

Bước 2: Setting up Main View Controller

Trong MainViewController class, ta sẽ khai báo một số thuộc tính cần sử dụng:

  • Enum CardState để biểu thị hai trạng thái chính của Card View là hiển thị (expanded) và ẩn (collapsed).
  • Biến cardVisible biểu thị trạng thái hiện tại của Card View.
  • Biến nextState biểu thị trạng thái tiếp theo của Card View.
  • Biến startCardHeight và endCardHeight biểu thị chiều cao của Card tại thời điểm bắt đầu (collapsed) và thời điểm kết thúc (expanded).
  • Biến animationProgressWhenInterrupted biểu thị phần trăm tiến trình của Animation khi bị gián đoạn.

Tiếp theo, ta sẽ add cardview và visual effect view vào view của MainViewController và set frame cho chúng. Ở đây visual effect view sẽ tạo hiệu ứng làm mờ khi cardview được expand.

Và để thực hiện được các thao tác expand hay collapse thì ta cần add tap gesture và pan gesture cho handleArea của CardViewController. Tap gesture sẽ nhận biết thao tác nhấn của người dùng để thực hiện animation cho cardview khi expand hoặc collapse.

Còn Pan gesture sẽ nhận biết khi người dùng kéo lên xuống cardview để phù hợp với kích thước expand của cardview.

Bước 3: Setting up the animation

Popover Card View sử dụng UIViewPropertyAnimator để tạo animation, gắn liền với việc sử dụng Pan Gesture để xác định phần trăm Popover view được hiển thị để animation có thể cập nhật dựa trên số phần trăm đó.

Và với Tap Gesture thì Popover view bật lên sẽ khớp với vị trí cần hiển thị đã set trước đó.

Bên cạnh đó, UIViewPropertyAnimator còn sử dụng curved animation để bo tròn góc cho Card View khi expand.