Проблема с добавлением сеанса захвата подслоя анимации Лотти

#swift #lottie

Вопрос:

По сути, в настоящее время я делаю следующее ниже, чтобы отобразить квадрат поверх сеанса захвата, но я хотел бы заменить квадрат анимацией Лотти — возникли проблемы с пониманием того, как я могу разместить и воспроизвести анимацию вместо отображения статического квадрата:

 captureSession.startRunning()

let scannerOverlayPreviewLayer = ScannerOverlayPreviewLayer(session: captureSession)
scannerOverlayPreviewLayer.frame = self.view.bounds
scannerOverlayPreviewLayer.maskSize = CGSize(width: 200, height: 200)
scannerOverlayPreviewLayer.backgroundColor = UIColor.black.withAlphaComponent(0.5).cgColor
scannerOverlayPreviewLayer.videoGravity = .resizeAspectFill
self.view.layer.addSublayer(scannerOverlayPreviewLayer)
 

Анимация:

 private var animationView: AnimationView?
animationView = .init(name: "scan")
animationView!.frame = view.bounds
animationView!.contentMode = .scaleAspectFit
animationView!.loopMode = .loop
animationView!.animationSpeed = 0.5
view.addSubview(animationView!)
animationView!.play()
 

Я намерен разместить анимацию в центре экрана. Размер анимации-ширина: 200, высота: 200, а также.

Ответ №1:

Вы пытаетесь поместить Лотти в центр экрана?
Я рекомендую вам сначала сделать вид посередине, а затем разместить в нем Лотти.

Сначала создайте представление высотой 200 и шириной 200 в середине экрана.

         let myView = UIView()
        self.view.addSubview(myView)
        
        myView.translatesAutoresizingMaskIntoConstraints = false

        myView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true
        myView.centerYAnchor.constraint(equalTo: self.view.centerYAnchor).isActive = true
        myView.widthAnchor.constraint(equalToConstant: 200).isActive = true
        myView.heightAnchor.constraint(equalToConstant: 200).isActive = true
 

Затем вставьте представление анимации в созданное вами представление. Ты можешь сделать то же самое с Лотти.

        let animationView = AnimationView(name: "scan")
        
        animationView.frame = CGRect(x: 0, y: 0, width: myView.bounds.width, height: myView.bounds.height)
 

Комментарии:

1. Он не отображается в центре экрана — см. Мой пример того, что работает выше self.view. layer.addSublayer..по какой-то причине это работает. Есть какие-нибудь мысли?

2. @MarkLyson Вы пробовали написать этот код? MyView.addSubview(анимационный вид)