iOS Animation - Phần 9: Tạo Shapes và Masks Layer
Bài đăng này đã không được cập nhật trong 7 năm
Lời nói đầu
Trong bài tiếp theo về iOS Animation, mình xin giới thiệu đến các bạn về cách tạo và animation Shapes và Masks Layer.
Với iOS, cách tạo Shapes và Masks Layer rất đơn giản. Chúng ta có thể vẽ một hình khối bất kỳ bằng class CAShapeLayer
, đây là 1 subclass của class CALayer
(một class mà chúng ta đã được biết ở các phần trước) và dùng UIBezierPath
để định nghĩa hình dáng của hình khối cần vẽ .
Ví dụ: tạo một shape layer hình tròn:
let circleLayer = CAShapeLayer()
circleLayer.path = UIBezierPath(ovalIn: CGRect(x: 0, y: 0, width: 100, height: 100)).cgPath
circleLayer.strokeColor = UIColor.white.cgColor
circleLayer.lineWidth = lineWidth
circleLayer.fillColor = UIColor.clear.cgColor
view.layer.addSublayer(circleLayer)
Cách tạo animation
Và để tạo được animation, chúng ta sẽ sử dụng thay đổi 4 thuộc tính của CAShapeLayer
.
Các tham số có thể tạo được animation:
path
: thay đổi hình dạng của shape layer với các hình khác nhau.fillColor
: thay đổi màu phía bên trong của shape layer với các màu khác nhau.lineDashPhase
: tạo hiệu ứng vùng đánh dấu (marquee) xung quanh shape layer.lineWidth
: thay đổi độ dày đường stroke của shape layer.
Ví dụ tạo animation cho path
let morphAnimation = CABasicAnimation(keyPath: "path")
morphAnimation.duration = animationDuration
morphAnimation.toValue = UIBezierPath(ovalIn: morphedFrame).cgPath
morphAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut)
circleLayer.add(morphAnimation, forKey:nil)
Ví dụ tạo animation bằng lineWidth
let strokeStartAnimation = CABasicAnimation(keyPath: "strokeStart")
strokeStartAnimation.fromValue = -0.5
strokeStartAnimation.toValue = 1.0
let strokeEndAnimation = CABasicAnimation(keyPath: "strokeEnd")
strokeEndAnimation.fromValue = 0.0
strokeEndAnimation.toValue = 1.0
let strokeAnimationGroup = CAAnimationGroup()
strokeAnimationGroup.duration = 1.5
strokeAnimationGroup.repeatDuration = 5.0
strokeAnimationGroup.animations = [strokeStartAnimation, strokeEndAnimation]
ovalShapeLayer.add(strokeAnimationGroup, forKey: nil)
Kết thúc
Cách tạo và animation bằng ShapeLayer khá đơn giản, nhưng rất hữu ích, chúng ta sẽ không phải dùng đến image cho các hình khối đơn giản nữa. Hi vọng các bạn sẽ có tạo đc cho mình những hình khối và animation như mong đợi, phù hợp với những mục đích riêng.
All rights reserved