Центрирование (прямо по центру) изображения в кадре - PullRequest
0 голосов
/ 18 июня 2020

Я запускаю анимацию, в которой на экране запуска отображается изображение.

Затем он переходит в вид, расположенный над основной раскадровкой, который показывает раскадровку под ней после завершения анимации.

Однако изображение в наложенном виде не центрируется. Как бы я это сделал?

Я предоставил код и изображения ниже, чтобы показать разницу. Это код в классе ViewController в раскадровке.


import UIKit

class ViewController: UIViewController {

    let arImage = UIImageView(image: UIImage(named: "CN")!)
    let splashView = UIView()

    override func viewDidLoad() {
        super.viewDidLoad()

        splashView.backgroundColor = UIColor(red: 255/255, green: 53/255, blue: 79/255, alpha: 1.0)
        // Colour of View
        view.addSubview(splashView)
        splashView.frame = CGRect(x: 0, y: 0, width: view.bounds.width, height: view.bounds.height)
        // View Bounds

        arImage.contentMode = .scaleAspectFit
        // Aspect Fill Of Image
        splashView.addSubview(arImage)
        arImage.frame = CGRect(x: splashView.frame.midX - 50, y: splashView.frame.midX - 50, width: 160, height: 160)
        // image sizing (not placement)

    }

    override func viewDidAppear(_ animated: Bool) {

        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 2){
            self.scaleDownAnimation()
        }
    }

    func scaleDownAnimation(){
        UIView.animate(withDuration: 0.5, animations: {
            self.arImage.transform = CGAffineTransform(scaleX: 0.5, y: 0.5)
            // shrinks

        }) { ( success) in

            self.scaleUpAnimation()

        }
    }


    func scaleUpAnimation() {

        UIView.animate(withDuration: 0.35, delay: 0.1, options: .curveEaseIn, animations: {
            self.arImage.transform = CGAffineTransform(scaleX: 5, y: 5)
        }) { ( success) in
            self.removeSplashScreen()
            // expands

        }
    }

    func removeSplashScreen() {
        splashView.removeFromSuperview()
    }
}

Вот изображения, показывающие разницу между экраном запуска и видом:

LaunchScreen Непосредственно перед анимацией

Спасибо

1 Ответ

0 голосов
/ 18 июня 2020

Вы всегда можете установить рамки с ограничениями автоматической компоновки

    override func viewDidLoad() {
        super.viewDidLoad()

        splashView.backgroundColor = UIColor(red: 255/255, green: 53/255, blue: 79/255, alpha: 1.0)
        splashView.translatesAutoresizingMaskIntoConstraints = false


        view.addSubview(splashView)
        splashView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor).isActive = true
        splashView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor).isActive = true
        splashView.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true
        splashView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true


        arImage.contentMode = .scaleAspectFit
        arImage.translatesAutoresizingMaskIntoConstraints = false

        splashView.addSubview(arImage)

        arImage.widthAnchor.constraint(equalToConstant: 160).isActive = true
        arImage.heightAnchor.constraint(equalToConstant: 160).isActive = true
        arImage.centerXAnchor.constraint(equalTo: splashView.centerXAnchor).isActive = true
        arImage.centerYAnchor.constraint(equalTo: splashView.centerYAnchor).isActive = true

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...