CircleAnimation loading in swift 4

Опубликовано: 12 Февраль 2026
на канале: Divyesh Gondaliya
199
18

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()
}
}