Merhabalar bu yazımda iOS ile uygulamalarınızda kayıt,giriş vb bölümlerinde arka fonda anlık olarak video nasıl oynatırız ? sorusunu cevaplayacağım.
Uygulamalarınızda sadece giriş,kayıt sayfalarında değil. Aynı zamanda tutorial sayfalarınızdada view üzerine eklediğiniz elementlerinizin altında oynayan video uygulamaya güzel bir görüntü ve değişiklik kazandırmakta. Bunun en güzel örneğini Spotify uygulamasını açtığımız zaman background üzerinde oynayan video ile görüyoruz. Bu görsel düzenlemeyi yapmak hiç zor değil.
AVPlayerLayer ile basit bir şekilde istediğiniz view üzerine layer olarak gömerek, videolarınızı oynatabilirsiniz. Daha sonrasında ise elementlerinizi normal bir şekilde viewiniz üzerine ekleyebilirsiniz.
Aşağıdaki kodu inceleyebilir ve deneyebilirsiniz.
import UIKit import AVFoundation import AVKit class mainVC: UIViewController { let headerLabel:UILabel = { let label = UILabel() label.text = "Fly to dreams..." label.textColor = UIColor.black label.font = UIFont(name: "Avenir", size: 31) label.translatesAutoresizingMaskIntoConstraints = false label.layer.zPosition = 99 label.textAlignment = .center label.shadowColor = UIColor.white label.shadowOffset = CGSize(width: 2, height: 1) return label }() override func viewDidLoad() { super.viewDidLoad() self.view.addSubview(headerLabel) NSLayoutConstraint.activate([ headerLabel.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 40), headerLabel.leftAnchor.constraint(equalTo: self.view.leftAnchor), headerLabel.rightAnchor.constraint(equalTo: self.view.rightAnchor), headerLabel.heightAnchor.constraint(equalToConstant: 100) ]) setupVideoView() } func setupVideoView() { guard let vidPath = Bundle.main.path(forResource: "vid", ofType: "mp4") else { return } let url = URL(fileURLWithPath: vidPath) let player = AVPlayer(url: url) let playerLayer = AVPlayerLayer(player: player) playerLayer.frame = self.view.frame self.view.layer.addSublayer(playerLayer) playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill player.play() player.actionAtItemEnd = .none NotificationCenter.default.addObserver(self, selector: #selector(videoDidPlay(_:)), name: NSNotification.Name("AVPlayerItemDidPlayToEndTimeNotification"), object: player.currentItem) } @objc func videoDidPlay(_ notification:Notification) { let player = notification.object as! AVPlayerItem player.seek(to: kCMTimeZero) } override var prefersStatusBarHidden: Bool { return true } }//
Not: Bunun yanı sıra bilmeyenler için basit bir ipucu vereyim. Bundle.main.path işleminde bazen dosya uygulamanın içeririnde olsa bile nil döndürmekte. Bunun çözümü için Xcode üzerinden Targets + Build Phases + Copy Bundle Resources içerisinde dosyanın olup olmadığını kontrol edin yoksa buraya eklediğiniz takdirde sorunsuzca Bundle doğru path’i döndürecektir.
Bu yazı yorumlara kapalı.