iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 19
0
自我挑戰組

打造專案管理 iOS App 系列 第 19

安能取熊掌而捨魚? UIActivityIndicatorView

  • 分享至 

  • xImage
  •  

安能取熊掌而捨魚? UIActivityIndicatorView

UIActivityIndicatorView 通常都會使用在讀取 Loading 畫面中,用來表示程式仍在進行。

Declation


原來 UIActivityIndicatorView 是一個UIView。

可以通過調用和方法來控制活動指示器的動畫時間。要在動畫停止時自動隱藏活動指示器。

您可以使用color屬性設置活動指示器的顏色。

讓我們來試試實作吧:


實例化

實例化一個 UIActivityIndicatorView ,在後面放入一個閉包,定義初始化的屬性,位置,顏色,style。

    let loadIndicatorView:UIActivityIndicatorView = {
        var loading = UIActivityIndicatorView()
        loading.center = CGPoint(x: ScreenSize.centerX.value, y: ScreenSize.centerY.value)
        loading.color = .white
        loading.style = .large
        
        return loading
    }()

製作讀取畫面的背景

製作一個毛玻璃當作讀取畫面的背景。

let glass:UIView = {
        let blurEffect = UIBlurEffect(style: .systemMaterialDark)
        let glassView = UIVisualEffectView(effect: blurEffect)
        glassView.frame = CGRect(x:0, y:0, width: ScreenSize.width.value, height: ScreenSize.height.value)
        glassView.layer.cornerRadius = 15
        glassView.clipsToBounds = true
        return glassView
    }()

讀取中

為了讓讀取畫面的出現過度更加柔和,把生成的過程加入 animate。為了讓讀取畫面更好復用,用一個funtion包起來。

func loading(){
        glass.alpha = 0
        self.view.addSubview(glass)
        self.view.addSubview(loadIndicatorView)
        loadIndicatorView.startAnimating()
        let animate = UIViewPropertyAnimator(duration: 3, curve: .easeIn) {
            self.navigationController?.navigationBar.isHidden = true
            self.glass.alpha = 1
        }
        animate.startAnimation()
    }

讀取完畢

讀取完畢亦是如此。

    func stopLoading(){
        let animate = UIViewPropertyAnimator(duration: 3, curve: .easeIn) {
            self.glass.alpha = 0
            self.navigationController?.navigationBar.isHidden = false
            self.glass.removeFromSuperview()
            self.loadIndicatorView.removeFromSuperview()
        }
        animate.startAnimation()
    }

實際運用

下面是上傳圖片的範例程式碼,因為上傳圖片是一個漫長的過程,所以需要Loading,做過渡。

    private func createTask(){
        loading()
        TaskModelManager.create(cardID,cardEditView) {
            self.popView()
        }
    }


上一篇
安能取熊掌而捨魚 SnapKit 進階用法(更新約束)
下一篇
安能取熊掌而捨魚 模糊畫面運用
系列文
打造專案管理 iOS App 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言