class LiningAnimationView: UIView {
var objects: [CALayer] = [CALayer(),CALayer(),CALayer()]
override func layoutSubviews() {
super.layoutSubviews()
self.backgroundColor = .green
self.addAnimaiton()
}
func addAnimaiton() {
let width: CGFloat = 6
let space: CGFloat = 10
let amplitude: CGFloat = (self.bounds.size.height - width)
let duration: CFTimeInterval = 1
let offset: CGFloat = (self.bounds.size.width - (CGFloat(self.objects.count) * (space + width) - space)) / 2.0
self.objects.enumerated().forEach { (index,item) in
item.removeAllAnimations()
let y = index % 2 == 0 ? 0 : amplitude
item.frame = CGRect(x: offset + (space + width) * CGFloat(index), y: y , width: width, height: width)
item.cornerRadius = width/2
item.masksToBounds = true
item.backgroundColor = rgba(68, 159, 232, 1).cgColor
if item.superlayer == nil {
self.layer.addSublayer(item)
}
// 上下跳动的关键帧动画
let jump = CAKeyframeAnimation(keyPath: "position.y")
if index % 2 == 0 {
// 低位置
jump.values = [y, y + amplitude, y] // 在第一、二、三个关键帧位置分别为
} else {
// 高位置
jump.values = [y, y - amplitude, y] // 在第一、二、三个关键帧位置分别为
}
print("jump.values == \(jump.values) \(self.bounds)")
jump.keyTimes = [0, 0.5, 1] // 时间百分比
jump.calculationMode = .paced
// 动画组合
let group = CAAnimationGroup()
group.animations = [jump]
group.duration = duration // 动画总时长
group.repeatCount = .infinity // 无限循环
item.add(group, forKey: nil)
}
}
}
三个小球上下跳动核心动画
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 【蝴蝶效应】 蝴蝶效应:上个世纪70年代,美国一个名叫洛伦兹的气象学家在解释空气系统理论时说,亚马逊雨林一只蝴蝶...