Skip to content

YamamotoDesu/SwiftAnimation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

45 Commits
 
 
 
 
 
 

Repository files navigation

SwiftAnimation

UIKit Animation

Simple Animation Spring Animation Button Animation Property Animation

Core Graphics

CGAffineTransform Animation Core Basic Animation Core Spring Animation

Usage

Simple Animation

https://github.com/YamamotoDesu/SwiftAnimation/blob/main/SwiftAnimation/Controller/SimpleController.swift
        var spriteImages = [UIImage]()
        
        for i in 0 ..< 29 {
            spriteImages.append(UIImage(named: "tile0\(i)")!)
        }
        
        imageView.animationImages = spriteImages
        // The amount of time it takes to go through one cycle of the images
        imageView.animationDuration = 0.6
        // Specifies the number of times to repeat the animation
        imageView.animationRepeatCount = 1
        imageView.startAnimating()

Spring Animation

https://github.com/YamamotoDesu/SwiftAnimation/blob/main/SwiftAnimation/Controller/SpringController.swift
       // Invokes a method of the receiver on the current thread using the default mode after a delay.
       perform(#selector(animateBox), with: nil, afterDelay: 2)
        
        basicView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(animateOnTap)))
        
     }

     @objc fileprivate func animateBox() {
        
        yAnchor.isActive = false
        yAnchor = basicView.centerYAnchor.constraint(equalTo: view.centerYAnchor, constant: -100)
        yAnchor.isActive = true
        
        widthAnchor.isActive = false
        widthAnchor = basicView.widthAnchor.constraint(equalToConstant: 300)
        widthAnchor.isActive = true
        
        heightAnchor.isActive = false
        heightAnchor = basicView.heightAnchor.constraint(equalToConstant: view.frame.height - 50)
        heightAnchor.isActive = true
        
        // Performs a view animation using a timing curve corresponding to the motion of a physical spring.
        UIView.animate(withDuration: 0.6, delay: 1, usingSpringWithDamping: 0.4, initialSpringVelocity: 1.5, options: .curveLinear) {
            self.view.layoutIfNeeded()
        }
    }
    
    var tapped:Bool = false
    
    @objc func animateOnTap() {
        
        if tapped {
            widthAnchor.isActive = false
            widthAnchor = basicView.widthAnchor.constraint(equalToConstant: view.frame.width/2)
            widthAnchor.isActive = true
        } else {
            yAnchor.isActive = false
            yAnchor = basicView.centerYAnchor.constraint(equalTo: view.centerYAnchor, constant: 200)
            yAnchor.isActive = true
            
            widthAnchor.isActive = false
            widthAnchor = basicView.widthAnchor.constraint(equalToConstant: view.frame.width - 20)
            widthAnchor.isActive = true
            
            heightAnchor.isActive = false
            heightAnchor = basicView.heightAnchor.constraint(equalToConstant: 200)
            heightAnchor.isActive = true
            
            UIView.animate(withDuration: 0.6, delay: 1, usingSpringWithDamping: 0.4, initialSpringVelocity: 1.5, options: .curveLinear) {
                self.view.layoutIfNeeded()
            }
        }
        
        self.tapped = !tapped
    }
    
    

Button Animation

https://github.com/YamamotoDesu/SwiftAnimation/blob/main/SwiftAnimation/Controller/ButtonController.swift
        let button = AnimationButton(title: "MCButton")
        view.addSubview(button)

        UIView.animate(withDuration: 0.6, delay: 1, usingSpringWithDamping: 0.4, initialSpringVelocity: 1.5, options: .curveLinear) {
            self.view.layoutIfNeeded()
        }

https://github.com/YamamotoDesu/SwiftAnimation/blob/main/SwiftAnimation/View/AnimationButton.swift

        addTarget(self, action: #selector(down), for: .touchDown)
        addTarget(self, action: #selector(up), for: .touchUpInside)
    }
    
    @objc fileprivate func down() {
        
        wAnchor?.isActive = false
        hAnchor?.isActive = false
        wAnchor?.constant = 100
        hAnchor?.constant = 100
        wAnchor?.isActive = true
        hAnchor?.isActive = true
        
        UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 1, options: .curveEaseIn) {
            self.superview?.layoutIfNeeded()
            //self.transform = CGAffineTransform(scaleX: 0.95, y: 0.95)
        }

    }
    
    @objc fileprivate func up() {
        
        wAnchor?.isActive = false
        hAnchor?.isActive = false
        wAnchor?.constant = 150
        hAnchor?.constant = 54
        wAnchor?.isActive = true
        hAnchor?.isActive = true
        
        UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 1, options: .curveEaseIn) {
            self.superview?.layoutIfNeeded()
            // resetting any changes that have been applied by modifying its transform property
            self.transform = .identity
        }
    }

Property Animation

https://github.com/YamamotoDesu/SwiftAnimation/blob/main/SwiftAnimation/Controller/PropertyController.swift
        // A class that animates changes to views and allows the dynamic modification of those animations.
        let animator = UIViewPropertyAnimator(duration: 1, curve: .linear, animations: nil) 
        self.blurView.alpha = 0
        
        animator.addAnimations {
            self.blurView.alpha = 1
            // An affine transformation matrix for use in drawing 2D graphics.
            self.imageView.transform = CGAffineTransform(scaleX: 2, y: 2)
        }

        slider.addTarget(self, action: #selector(handleSliderChanged(slider:)), for: .allEvents)
    }
       
    @objc fileprivate func handleSliderChanged(slider: UISlider) {
        print(slider.value)
        // The completion percentage of the animation
        animator.fractionComplete = CGFloat(slider.value)
    }

CGAffineTransform Animation

CGAffineTransform Animation scaledBy(x: 1.1, y: 1.6) transform.translatedBy(x: 100, y: 100) transform.rotated(by: 45)
https://github.com/YamamotoDesu/SwiftAnimation/blob/main/SwiftAnimation/Controller/CGAffineTransformController.swift
        UIView.animate(withDuration: 0.3, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 1, options: .curveEaseIn) {
            var transform = CGAffineTransform.identity
            transform = transform.scaledBy(x: 1.1, y: 1.6)
            transform = transform.translatedBy(x: 30, y: 50)
            transform = transform.rotated(by: 45)
            
            self.box.transform = transform
        }

Core Basic Animation

https://github.com/YamamotoDesu/SwiftAnimation/blob/main/SwiftAnimation/Controller/CABasicAnimationController.swift
        let basic0 = CABasicAnimation(keyPath: "transform.scale")
        // Defines the value the receiver uses to end interpolation.
        basic0.toValue = 0.5
        basic0.duration = 2
        
        // The receiver remains visible in its final state when the animation is completed.
        basic0.fillMode = CAMediaTimingFillMode.forwards
        // Determines if the animation is removed from the target layer’s animations upon completion.
        basic0.isRemovedOnCompletion = false
        
        imageView.layer.add(basic0, forKey: "test.io")
        

Core Basic Animation

https://github.com/YamamotoDesu/SwiftAnimation/blob/main/SwiftAnimation/Controller/CASpringController.swift
        let springAnimation = CASpringAnimation(keyPath: "transform.scale")
        springAnimation.fromValue = 0
        springAnimation.toValue = 1
        springAnimation.damping = 5
        springAnimation.mass = 0
        springAnimation.duration = 10
        
        imageView.layer.add(springAnimation, forKey: "test.iosa")
        blurView.layer.add(springAnimation, forKey: "test.iosa")
        

Releases

No releases published

Packages

No packages published

Languages