My Social Media link is below
-------------
instagram :- / gdivyesh40
facebook :- https://www.facebook.com/profile.php?...
[~LT~] = less than
[~GT~] = greater than
class CircleAnimation {
var overlayView = UIView()
var back_view = UIView()
private var size:CGFloat = 0.0
private var circleCount = 4
private var circleArray = [UIView]()
private var translateDuration = 0.2
internal var scale:CGFloat = 5
class var shared: CircleAnimation {
struct Static {
static let instance: CircleAnimation = CircleAnimation()
}
return Static.instance
}
func show(_ viewtmp: UIView) {
overlayView.frame = CGRect(x: 0, y: 0, width: 150 , height: 150)
back_view.frame = viewtmp.frame
back_view.backgroundColor = UIColor.clear
overlayView.center = viewtmp.center
size = min(overlayView.frame.size.height, overlayView.frame.size.width)/scale
for i in 0 ..[~LT~] circleCount {
let view = UIView(frame: CGRect(origin: CGPoint(x: (overlayView.frame.size.height/2)-(size/2), y: (overlayView.frame.size.width/2)-(size/2)), size: CGSize(width: size, height: size)))
view.tag = i
view.layer.cornerRadius = size/2
view.layer.masksToBounds = true
overlayView.addSubview(view)
view.translatesAutoresizingMaskIntoConstraints = false
circleArray.append(view)
}
let v1 = circleArray[0]
v1.backgroundColor = UIColor(red: 0, green: 253/255, blue: 141/255, alpha: 1)
let v2 = circleArray[1]
v2.backgroundColor = UIColor(red: 0, green: 172/255, blue: 246/255, alpha: 1)
let v3 = circleArray[2]
v3.backgroundColor = UIColor(red: 1, green: 198/255, blue: 0/255, alpha: 1)
let v4 = circleArray[3]
v4.backgroundColor = UIColor(red: 1, green: 71/255, blue: 141/255, alpha: 1)
viewtmp.addSubview(back_view)
viewtmp.addSubview(overlayView)
animateX()
}
func animateX() {
let translate = self.size*(self.scale/2 - 1)
let xTranslate = UIViewPropertyAnimator(duration: translateDuration, curve: .easeInOut)
xTranslate.addAnimations {
let v1 = self.circleArray[0]
v1.transform = CGAffineTransform(translationX: translate, y: 0)
let v2 = self.circleArray[1]
v2.transform = CGAffineTransform(translationX: -translate, y: 0)
}
xTranslate.addCompletion { (position) in
let xIdentity = UIViewPropertyAnimator(duration: self.translateDuration, curve: .easeInOut)
xIdentity.addAnimations {
let v1 = self.circleArray[0]
v1.transform = CGAffineTransform.identity
let v2 = self.circleArray[1]
v2.transform = CGAffineTransform.identity
}
xIdentity.addCompletion({ _ in
self.animateY()
})
xIdentity.startAnimation()
}
xTranslate.startAnimation()
}
func animateY() {
let translate = self.size*(self.scale/2 - 1)
let yTranslate = UIViewPropertyAnimator(duration: translateDuration, curve: .easeInOut)
yTranslate.addAnimations {
let v1 = self.circleArray[2]
v1.transform = CGAffineTransform(translationX: 0, y: translate)
let v2 = self.circleArray[3]
v2.transform = CGAffineTransform(translationX: 0, y: -translate)
}
yTranslate.addCompletion { (position) in
let yIdentity = UIViewPropertyAnimator(duration: self.translateDuration, curve: .easeInOut)
yIdentity.addAnimations {
let v1 = self.circleArray[2]
v1.transform = CGAffineTransform.identity
let v2 = self.circleArray[3]
v2.transform = CGAffineTransform.identity
}
yIdentity.addCompletion({ _ in
self.animateRotate()
})
yIdentity.startAnimation()
}
yTranslate.startAnimation()
}
func animateRotate() {
let rotate = UIViewPropertyAnimator(duration: 0.3, curve: .easeInOut)
rotate.addAnimations {
for _ in 0..[~LT~] 5 {
let rotateTransform = CGAffineTransform(rotationAngle: .pi)
self.overlayView.transform = self.overlayView.transform.concatenating(rotateTransform)
}
}
rotate.addCompletion { (_) in
self.animateX()
}
rotate.startAnimation()
}
open func hideOverlayView() {
back_view.removeFromSuperview()
overlayView.removeFromSuperview()
}
}