簡體   English   中英

在UIView.animateWithDuration之前完全取消隱藏視圖

[英]Completely unhide view prior to UIView.animateWithDuration

我正在使用UIView.animateWithDuration在點擊識別后在視圖中滑動。 效果很好,除了第一次,視圖是稍晚才隱藏,並且突然出現在動畫的中間。 隨后的顯示/隱藏操作沒有此問題。

我正在實現如下

    textBlurBackground.hidden = false
    descriptionOutlet.hidden = false
    UIView.animateWithDuration(0.4, delay: 0.0, options: nil, animations: {
        self.textBlurBackground.transform = CGAffineTransformMakeTranslation(0, 0)
        self.descriptionOutlet.transform = CGAffineTransformMakeTranslation(0, 0)
        }, completion: nil)

因此,即使我首先設置了“ hidden”屬性(在前兩行中),這似乎也有所延遲,並且僅在動畫已經運行時才執行。 請注意,這僅在第一次創建視圖時發生; 隨后的顯示/隱藏操作可以正常工作(在動畫之前,視圖完全未被隱藏)。

我注意到有一個“完成”鈎子-准備階段是否有等同的東西? 也就是說,在完全取消隱藏視圖之前,不要開始動畫。

感謝注釋中的時序建議(並且運行緩慢),我可以弄清楚,在這種情況下,這不是時序問題,而是在首次加載視圖時,視圖的尺寸某種程度上是不正確的。 例如,我在viewDidLoad中

override func viewDidLoad() {
    textBlurBackground.hidden = true
    descriptionOutlet.hidden = true
    descriptionOutlet.transform = CGAffineTransformMakeTranslation(-textBlurBackground.bounds.width, 0)
    textBlurBackground.transform = CGAffineTransformMakeTranslation(-textBlurBackground.bounds.width, 0)
}

此時的textBlurBackground.bounds.width不正確; 該代碼無法將這些視圖完全移出屏幕,超出textBlueBackground視圖的負寬度。 但是,一旦加載了視圖,隨后的顯示/隱藏操作就可以正常工作,因為它可以為視圖獲取正確的大小。

因此,這似乎是自動布局大小的問題,其中“ textBlurBackground.bounds.width”在初始視圖加載時不正確。 這很奇怪,因為它不會更改大小,因此我可能需要指定更多約束。

一個視圖可能需要花費幾毫秒的時間才能出現,因為它必須在屏幕上渲染/繪制,主要是在該視圖包含很多子視圖的情況下。 您是否要在同一handleTap函數中實例化該視圖? 您應該在UIViewController的viewDidLoad方法中或在UIView的init中實例化視圖。 實例化視圖后立即設置為隱藏。 接下來,在handleTap ,取消隱藏它們並執行上面發布的動畫。

暫無
暫無

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

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