[SWIFT] Tạo stretchy header với hiệu ứng blur trong ScrollView

Tram Ho

Môi trường phát triển:

  • Swift Language Version: Swift 5
  • Xcode: Version 10.3
  • Deployment Target: 12.0

Bước 1: Tạo màn hình ViewController

Ta sẽ tạo màn hình ViewController như hình dưới đây:

Gồm các thành phần sau:

  • ScrollView: Thêm top, leading, trailing và bottom constraint, riêng top thì set constraint với Superview (constant = 0).
  • View1: Thêm top, leading, trailing và bottom constraint với scrollView (constant = 0), với height = 1000 và width = View.width
  • Image1: Thêm top, leading, trailing constraint với View1 và height = 300; ContentMode = Aspect Fill.

Bước 2: Tạo hiệu ứng stretchy header

Ta khai báo các outlets, biến và set giá trị ban đầu:

Giá trị của imageHeightConstraint thay đổi dựa trên giá trị offset.

Trong đó:

  • originalHeight là giá trị ban đầu của image height constraint.
  • offset là giá trị toạ độ y tương đối giữa điểm đầu của khung xem (contentView) và điểm đầu của scrollView.
  • defaultTop là giá trị ban đầu của image top constraint.
  • currentTop là giá trị hiện tại của image top constraint.

Bước 3: Tạo hiệu ứng Blur Effect

Ta tạo subview blurEffectView và set constraint với imageView.

Trong đó:

  • UIVisualEffectView: object thực thi một số hiệu ứng phức tạp.
  • UIViewPropertyAnimator: object cho phép tạo hiệu ứng đối với sự thay đổi của views.
  • fractionComplete: phần trăm hoàn thành của animation sẽ thay đổi dựa trên giá trị offset.

Và đây là kết quả:

Tài liệu tham khảo:

https://www.youtube.com/watch?v=R5CC1_QhrvY&list=PL0dzCUj1L5JGr7DuK-FxyIoabvP2ge5uY

Link github:

https://github.com/ndhuy96/SwiftTips/tree/stretchyHeader

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo