簡體   English   中英

使用變化的約束對imageView進行動畫處理(進度條)Swift

[英]Animate an imageView with changing constraints (progress bar) Swift

因此,我正在創建一種進度條,主要是將動畫從0%變為100%的動畫。 我有兩張圖像,一幅在底部為紅色,一幅在頂部為黑色。 我試圖從頂部圖像中刪除,以創建從0%加載到100%的想法,並慢慢顯示下面的圖像。 我已經完成所有工作,但我的問題是我看不到兩者之間的情況。 我看到0%和100%,我可以調試它並查看控制器,並查看我的視圖控制器(自我)更新並慢慢取走頂部圖像,因此我知道它正在工作,但我看不到它遍歷每個動畫。 我編輯了一噸左右移動的東西,但是看不到變化。 謝謝大家的幫助!

override func viewDidAppear(_ animated: Bool) {
    if intCounter <= 100{
        UIView.animate(withDuration: 0.05, animations: catScanE.layoutIfNeeded)
        repeat {
            dblImageH = dblImageH - 3.80
            self.catScanE.frame = CGRect(x: 27  , y: 197, width: 320, height: dblImageH)
            intCounter = intCounter + 1
        } while  (intCounter <= 100)
    } else {
        performSegue(withIdentifier: "lastSegue", sender: nil)
    }
}

我已經設置了動畫,可以基本工作了,它在屏幕上向下滾動但顯示一種動畫。 我希望它逐漸限制約束,但這不是現在的問題。 由於動畫“有效”,因此我無法在動畫之后將其隱藏起來,這就是我所擁有的。 添加if intCounter部分使其跳過動畫並進行搜索,沒有它,屏幕將執行動畫並坐在那兒。

override func viewDidAppear(_ animated: Bool) {
            UIView.animate(withDuration: 5.0, animations: {
                self.dblImageH = self.dblImageH - 3.80
                self.catScanE.frame = CGRect(x: 27  , y: 197, width: 320, height: self.dblImageH)
                self.intCounter = self.intCounter + 1

                if self.intCounter > 100{
                    self.performSegue(withIdentifier: "lastSegue", sender: nil)}
            })

}

我在Ravron的一些幫助和更多StackOverflow搜索的幫助下找到了答案。 我將內容模式設置為屬性的頂部,並使用此代碼使它像進度條一樣工作(這是一個黑色圖像,下面有一個紅色圖像,看起來像是從0到100)。 我遇到了圖像基本向上或向下移動的問題,這是通過更改y坐標以匹配大小變化來解決的,因此它基本上保持在同一位置。 我只需要弄清楚在制作動畫時如何使計數器從0變為100。 謝謝! 希望這可以幫助其他人制作自定義進度欄。

    override func viewDidAppear(_ animated: Bool) {

            UIView.animate(withDuration: 5.0, animations: {
                self.catScanE.frame = CGRect(x: 27  , y: 200, width: 320, height: 0)
            }, completion: {finished in self.performSegue(withIdentifier: "lastSegue", sender: nil)})
}

animate塊僅運行一次,而視圖框架的最終設置就是其中的關鍵。 該視圖實際上是按照您希望的那樣從0%到100%進行動畫處理的,但是它發生在50毫秒或大約三幀中。

只需將幀設置到動畫塊中所需的最終位置,然后將持續時間增加到合理的范圍即可,例如100 * 0.05s = 5s

稍微擴展一下: animate方法非正式地說,“運行下面的塊,這將更改各個視圖的一個或多個特征。然后,將這些特征從其當前值隱式設置為運行該塊時設置的值。” 因此,它僅被調用一次,您應在其中將特征設置為其所需的最終值。

考慮閱讀《 iOS的View編程指南》中的動畫部分,該部分全面介紹了平台上的動畫基礎知識,還介紹了UIView基於塊的動畫,即您要在此處使用的類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM