Merhaba arkadaşlar, bu yazımızda Swift ile iOS projelerimizde nasıl ortak bir bekleme ekranı oluşturabiliriz bundan bahsedeceğimiz. Aslında bunun bir çok yolu var. Bunlar;
- Bir pod kullanmak
- UIView’e extension yazmak
- Sınıf yazmak
Pod Kullanmak
Loading ekranı için bir pod kullanmak en basit ve kolay olan yollarından birisidir. Bizim bu iş için en çok kullandığımız pod SVProgressHud. Buradan inceleyebilirsiniz. Çok basit bir şekilde ekranınızda loading çıkartabilirsiniz. Çıktısı aşağıdaki gibidir.
UIView’e Extension Yazmak
Burada kendiniz ayrı bir view koymak istiyorsanız, en mantıklı yollardan birisidir. Burada ViewController’inizin en üstündeki View’de showLoading fonksiyonunu çağırdığınızda arka tarafı blurlanmış bir Loading ikonu göreceksiniz.
// // UIView+Extension.swift // OSMovie // // Created by Omer Sezer on 8.03.2021. // import UIKit extension UIView { func showLoading() { let blurLoader = BlurLoader(frame: frame) self.addSubview(blurLoader) } func hideLoading() { if let blurLoader = subviews.first(where: { $0 is BlurLoader }) { blurLoader.removeFromSuperview() } } } class BlurLoader: UIView { var blurEffectView: UIVisualEffectView? override init(frame: CGRect) { let blurEffect = UIBlurEffect(style: .dark) let blurEffectView = UIVisualEffectView(effect: blurEffect) blurEffectView.frame = frame blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight] self.blurEffectView = blurEffectView super.init(frame: frame) addSubview(blurEffectView) addLoader() } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } private func addLoader() { guard let blurEffectView = blurEffectView else { return } let activityIndicator = UIActivityIndicatorView() if #available(iOS 13.0, *) { activityIndicator.style = .large } else { activityIndicator.style = .gray } activityIndicator.frame = CGRect(x: 0, y: 0, width: 50, height: 50) blurEffectView.contentView.addSubview(activityIndicator) activityIndicator.center = blurEffectView.contentView.center activityIndicator.startAnimating() } }
Ekran çıktısı aşağıdaki gibidir.
Sınıf Yazmak
Kullandığımız diğer bir yöntem ise bir sınıf oluşturup burada statik bir değişken ile bunu tanımlayıp ekranın en üst katmanında View göstermek. bunun için aşağıdaki kodu yazmanız yeterli.
public class LoadingOverlay{ var overlayView = UIView() var activityIndicator = UIActivityIndicatorView() class var shared: LoadingOverlay { struct Static { static let instance: LoadingOverlay = LoadingOverlay() } return Static.instance } public func showOverlay() { if let appDelegate = UIApplication.shared.delegate as? AppDelegate, let window = appDelegate.window { overlayView.frame = CGRect(x: 0, y: 0, width: 80, height: 80) overlayView.center = CGPoint(x: window.frame.width / 2.0, y: window.frame.height / 2.0) overlayView.backgroundColor = .blue overlayView.clipsToBounds = true overlayView.layer.cornerRadius = 10 activityIndicator.frame = CGRect(x: 0, y: 0, width: 40, height: 40) activityIndicator.style = .whiteLarge activityIndicator.center = CGPoint(x: overlayView.bounds.width / 2, y: overlayView.bounds.height / 2) overlayView.addSubview(activityIndicator) window.addSubview(overlayView) activityIndicator.startAnimating() } } public func hideOverlayView() { activityIndicator.stopAnimating() overlayView.removeFromSuperview() } }
Sonrasında ise kullanmak istediğiniz yerde, aşağıdaki kod satırını çalıştırmanız yeterli.
LoadingOverlay.shared.showOverlay()
Projeye buradan ulaşabilirsiniz. Sorularınız olursa mail veya yorum atarak sorabilirsiniz. İyi çalışmalar.
Bir yanıt yazın