UIView LifeCycle

LifeCycle 1. initWithCoder:
layerClass
setNeedsDisplay
addConstraints:
addConstraint: (can happen multiple times)
2. willMoveToSuperview:
3. invalidateIntrinsicContentSize
4. didMoveToSuperview
5. awakeFromNib
6. willMoveToWindow:
7. needsUpdateConstraints
8. didMoveToWindow
9. setNeedsLayout
10. updateConstraints
intrinsicContentSize
11. layoutSubviews (can happen multiple times)
12. drawRect:

Animate

Color Animation
UIView.animate(withDuration: 1, animations: { 
    self.backgroundColor = .brown
}, completion: nil)
Size Animation
UIView.animate(withDuration: 1, animations: { 
    self.frame.size.width += 10
    self.frame.size.height += 10
}, completion: nil)
Move Animation
UIView.animate(withDuration: 1, animations: { 
    self.bonacinno.frame.origin.y -= 20
}, completion: nil)
Repeat Animation
UIView.animate(withDuration: 1, animations: {
    self.bonacinno.backgroundColor = .brown
    self.bonacinno.frame.size.width += 10
    self.bonacinno.frame.size.height += 10
}) { _ in
    UIView.animate(withDuration: 1, delay: 0.25, options: [.autoreverse, .repeat], animations: {
        self.bonacinno.frame.origin.y -= 20
    })
}