主に備忘録

基本的には自分用の備忘録っぽいもの。

xibを使って簡易ローディングを作成する

今回の成果物

こちらに置いてあります
negibouze/SimpleLoadingSample

1. LoadingView.xibを作成する

1. 背景を設定する

alphaで透過させるとsubviewも一緒に透過されてしまうので、opacityで透過させる。
f:id:ita3y:20151223194138p:plain

2. Activity Indicatorを配置する

中心に来るようにする。
f:id:ita3y:20151223194144p:plain

2. LoadingView.swiftを作成する

class LoadingView: UIView {
    
    @IBOutlet var contentView: UIView!
    @IBOutlet weak var indicator: UIActivityIndicatorView!

3. .xibと.swiftを紐づける

1. File's OwnerにLoadingView.swiftを設定する

f:id:ita3y:20151223194150p:plain

2. 各要素を紐づける

f:id:ita3y:20151223194156p:plain

4. LoadingViewを実装する

class LoadingView: UIView {

    private static let sharedInstance = LoadingView()
    private var isShow = false
    
    private override init(frame: CGRect) {
        super.init(frame: (UIApplication.sharedApplication().delegate?.window??.bounds)!)
        self.setup()
    }

    class func show(duration: Double = 0.5) {
        if sharedInstance.isShow {
            return
        }
        guard let win = UIApplication.sharedApplication().delegate?.window, let window = win else {
            return
        }
        sharedInstance.isShow = true
        sharedInstance.indicator.startAnimating()
        window.addSubview(sharedInstance)
        UIView.animateWithDuration(duration,
            animations: {
                sharedInstance.alpha = 1.0
            },
            completion: nil
        )
    }

    class func hide(duration: Double = 0.5) {
        if !sharedInstance.isShow {
            return
        }
        UIView.animateWithDuration(duration,
            animations: {
                sharedInstance.alpha = 0
            },
            completion: { b in
                sharedInstance.removeFromSuperview()
                sharedInstance.indicator.stopAnimating()
                sharedInstance.isShow = false
            }
        )
    }